日期:2014-05-16  浏览次数:20621 次

struts2+jquery+ajax+json为什么$.post回调函数无法执行
如下是我的代码:
js:

$(function() {

$("#look").click(function() {
alert("look");
var url = "json.action";
var params = {
name : "kobe"
};
$.post(url, params, function(data) {
alert("post");//此句一直没反应
$("#result").text("后台来的数据");
}, "json");
});

});


Action:

public class jsonAction extends ActionSupport{

private String result;

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub

// HttpServletResponse responce = ServletActionContext.getResponse();
// PrintWriter out = responce.getWriter();

System.out.println("后台");//此句已经执行

// out.println(result); 这一句测试过也不行
Map<String,String> map = new HashMap<String,String>();
map.put("name", "kobe");
map.put("age", "23");
JSONObject jo = JSONObject.fromObject(map);
result = jo.toString();

return SUCCESS;
}


public String getResult() {
return result;
}

public void setResult(String result) {
this.result = result;
}

}


struts.xml

    <package name="default" namespace="/" extends="json-default">

        <default-action-ref name="index" />

        <action name="index">
            <result>/index.jsp</result>
        </action>
        
        <action name="json" class="action.jsonAction">
         <result type="json">
         <param name="root">result</param>
         </result>
        </action>

    </package>


后台jsonAction 代码已经执行,因为控制台中输出“后台”

但是前台的$.post的回调函数总是不执行,alert("post");一直不执行。

我用的jar包如下:
commons-lang3-3.1.jar;
json-lib-2.3-jdk15.jar;
jsonplugin-0.34.jar;
ezmorph-1.0.6.jar;
commons-beanutils-1.8.0.jar;
commons-collections-3.2.1.jar

而且后台没有报任何错误,求高手指点,弄了很久,纠结死了。谢谢了

------解决方案--------------------
猜测是你返回的json格式是怪异模式的,不是严格定义的json格式,并且你jq版本》=1.4,这样不会执行success回调,虽然你动态页没错误。可以参考 jQuery dataType指定为json的问题

修改成$.ajax调用,增加error回调测试下就知道了
      &nbs