大神看过来,ajax调用Action问题,不能走回调函数。贴出代码给看看是哪儿的问题
最近写了一个小练习,关于struts2+Ajax的小实验,木有想到结果悲剧了。
ajax通过异步调用action,经过我的测试,已经执行了action中指定的方法,并且在后台中打印出了组装后的json字符串,但是程序却不走回调函数,好心人帮忙看下。下面贴一下代码:
struts2配置文件
struts2 ajax
<package name="test" namespace="/" extends="struts-default,json-default">
<action name="queryOrgans" class="com.mcard.action.BOrgansAction" method="queryOrgByConditions">
<result type="json"/>
</action>
</package>
[解决办法]
function doQuery(){
var organsId = $("#organsId").attr("value");
var name = $("#organsName").attr("value");
这里先加上
alert(organsId);看看是否取到值啊
另外你那种形式我没用过,我用的一般都是
var data = {'name':name};
data:data,
的形式。。
beforeSend : function(XMLHttpRequest) {
$("#showOrg").text("数据加载中...");
},
这里添加XMLHttpRequest有什么意义么?
其实的没看出来哪里有问题。。。我用这个时间也不长,也不是很熟,如果指错了,请谅解。
[解决办法]
楼主的问题有点多....。楼主你先明确你要用google的gson还是用struts2自带的json-plugin。
你如果用了gson转换成json格式用response进行输出那么就不要在struts2的配置文件里面使用
<result type="json">在方法里面直接return null。
如果你要用json-plugin就不要用gson来转换正常情况的json-plugin你struts2的配置文件的package要extends="json-default"不可以继承两个。json-default已经extends了struts2-default了。你的业务方法里面要return SUCCESS;<result type="json">不变struts2自然会把action中所有具备get方法的属性以json的格式输出。json-plugin还有其它的设置信息具体的使用就不一一说明了,自己看struts2的开发文档里面说的很详细了
[解决办法]
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
response.getResponse().getWriter().writ(jsonResult);
response.getWriter().flush();
response.getWriter().close();
后台是这样的,用ajax的话不用配置什么,假如你前台写的没有问题的话,直接在回调函数里
alert(data);应该会得到值
我比较习惯用jquery的下面的写法
$.post("<%=basePath%>/three/grade_ajaxBackInfo.action",{applyIds:applyId},function(data){
alert(data);
});
[解决办法]
public String queryOrgByConditions(){
HttpServletResponse response = ServletActionContext.getResponse();
List<BOrgans> borgansList = new ArrayList<BOrgans>();
/*JSONArray jsonArray = JSONArray.fromObject();*/
Gson gson = new Gson();
borgansList = organsService.queryOrgByConditions(organId, name);
jsonResult = gson.toJson(borgansList);
response.setContentType("application/json; charset=UTF-8");
try {
response.getWriter().write(jsonResult);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(jsonResult+"gsongsongson");
for(BOrgans bor:borgansList){
System.out.println(bor.getOrganId());
System.out.println(bor.getName());
}
return NONE;
}
这个方法改成void看看