ajax提交一定需要Servlet来接吗? 最近写struts2 的时候用到了异步提交 里面出现个问题: ajax提交一定需要Servlet来接吗?我试了下用Action来接 暂时还没成功!请教各位大吓哈 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 struts2很好的支持ajax,有很多标签可以用得,网上找个例子看看 这个要在struts.xml中配置的 还有就是响应的格式如JSON js:var xmlHttp;var viewModel;//需要显示的区块//建立异步处理对象function createXMLHttpRequest() { xmlHttp = false; //开始初始化XMLHttpRequest对象 if(window.XMLHttpRequest) { //Mozilla 浏览器 xmlHttp = new XMLHttpRequest(); if (xmlHttp.overrideMimeType) {//设置MiME类别 xmlHttp.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE浏览器 try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!xmlHttp) { // 异常,创建对象实例失败 window.alert("不能创建XMLHttpRequest对象实例."); return false; }}//请求页面更换function requestMain(model,url) { createXMLHttpRequest(); viewModel=model; document.getElementById(model).innerHTML="<div id='loading'>正在加载...</div>"; url=url+time="+new Date().getTime(); xmlHttp.open("GET", url, true); xmlHttp.onreadystatechange = viewMain; xmlHttp.send(null);}function viewMain(){ if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { setTimeout("viewContent()", 800); } }}//显示模块function viewContent(){ document.getElementById(viewModel).innerHTML=xmlHttp.responseText;}html:<div id="view"></div><a href="javascript:void(0)" onClick="requestMain('<s:url action="HelloAction?Msg=Hello World.">',view)">Action</a><a href="javascript:void(0)" onClick="requestMain('<s:url action="HelloAction?Msg=test ok.">',view)">Action</a>action:HttpServletRequest request = ServletActionContext.getRequest();String Message = request.getParameter("Msg");基本上就是这样 struts2 的action很好的地支持ajax的异步请求的,你可能是因为访问地址写错了吧! 唉。struts最后会跳转到那个页面去?童鞋,是view层!在view层写啥?是一个json!{....}具体咋写。还是自己找找吧。 当然。前提是extjs一类的东东,如果没有使用任何框架,那就只需要你把信息${message}在jsp页面就可以了。 struts完全可以支持ajax的异步请求 ajax的请求和你平时请求没什么区别的,比如你平时没用用xxx.action去后台请求,那用ajax也用xxx.action没有什么区别的!取不到数据的原因可能是你前台没写好!ajax难度就在于 用的是js,由于浏览器之间的不一样,js也会相对不一样,比较麻烦一点!其实原理很简单! 如果你是用的servlet就不要跳转. 同理你使用action就return null; 或者不跳转 楼主的这边的Ajax是针对的web的Ajax,Ajax无非异步请求,Web的Ajax无非是浏览器向服务器服务端口发送了一次http的异步请求。浏览器同时等待服务端的response流,并将流展现到view的变化中。所以只要能解析http协议的服务都可以为之提供服务,即能答复请求。在答复能力上,完全可以把Ajax的身份摒弃,完全当做普通HTTP请求来看。Web 容器通过部署在其中服务回应请求。那么回顾http请求的声明周期,不难看出.----------------------------request -> filter -> servlet -> filter -> response----------------------------Action 只不过是MVC模式中分出来的东西。关键的东西只有servlet 和 filter 而已。例如: Struts2便有 servlet 和 filter 驱动两种模式。 谢谢各位了这个问题已经解决在ajax异步接收的时候,,只要相应的Action里面相关参数提供getter setter 方法 不需要发送接收等操作 然后在struts.xml 的action 标签属性里面 加上 type="json" <param name="includeProperties"></param>当然json这个result得提前写好 oracle 时间排序问题 公司源码 hibernate和strurts集成 如何从数据库表中取得已存图片及相关信息 j2ee高手请进! Acess数据库问题 jboss+eclipse+oracle怎么配置?怎么在jboss下运行servlets? 请问这是什么意思? SQLServerException: 从数据类型 nvarchar 转换为 bigint 时出错。 hibernate proxy异常 varchar(100) 倒序 排序 request.getParameter("PageNo")因为这条语句中的参数“PageNo”不存在,而出异常的解决方法
var viewModel;//需要显示的区块
//建立异步处理对象
function createXMLHttpRequest() {
xmlHttp = false;
//开始初始化XMLHttpRequest对象
if(window.XMLHttpRequest) { //Mozilla 浏览器
xmlHttp = new XMLHttpRequest();
if (xmlHttp.overrideMimeType) {//设置MiME类别
xmlHttp.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject) { // IE浏览器
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!xmlHttp) { // 异常,创建对象实例失败
window.alert("不能创建XMLHttpRequest对象实例.");
return false;
}
}
//请求页面更换
function requestMain(model,url)
{
createXMLHttpRequest();
viewModel=model;
document.getElementById(model).innerHTML="<div id='loading'>正在加载...</div>";
url=url+time="+new Date().getTime();
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = viewMain;
xmlHttp.send(null);
}
function viewMain()
{
if (xmlHttp.readyState == 4)
{
if (xmlHttp.status == 200)
{
setTimeout("viewContent()", 800); }
}
}
//显示模块
function viewContent()
{
document.getElementById(viewModel).innerHTML=xmlHttp.responseText;
}
html:<div id="view"></div>
<a href="javascript:void(0)" onClick="requestMain('<s:url action="HelloAction?Msg=Hello World.">',view)">Action</a>
<a href="javascript:void(0)" onClick="requestMain('<s:url action="HelloAction?Msg=test ok.">',view)">Action</a>
action:HttpServletRequest request = ServletActionContext.getRequest();
String Message = request.getParameter("Msg");
基本上就是这样
比如你平时没用用xxx.action去后台请求,那用ajax也用xxx.action没有什么区别的!
取不到数据的原因可能是你前台没写好!ajax难度就在于 用的是js,由于浏览器之间的不一样,js也会相对不一样,比较麻烦一点!其实原理很简单!
Web 容器通过部署在其中服务回应请求。那么回顾http请求的声明周期,不难看出.----------------------------
request -> filter -> servlet -> filter -> response
----------------------------Action 只不过是MVC模式中分出来的东西。关键的东西只有servlet 和 filter 而已。例如: Struts2便有 servlet 和 filter 驱动两种模式。
这个问题已经解决在ajax异步接收的时候,,只要相应的Action里面相关参数提供getter setter 方法 不需要发送接收等操作 然后在struts.xml 的action 标签属性里面 加上 type="json"
<param name="includeProperties"></param>
当然json这个result得提前写好