调试代码遇到一个问题,就是前台执行删除操作后,controller返回数据,但前台接收时,ajax不执行success回调,总是弹出失败的对话框.接收数据类型是json.
先看看我的前台代码.
if (rows) {
$.messager.confirm('警告','确定删除吗?',function(r) {
if (r) {
$.ajax({
type : 'post',url : 'deleteStudentTeachClass',data : {
"ids" : ids
},dataType : 'json',traditional : true,success : function(result) {
$.messager.alert("提示","恭喜您,删除成功","info");
$("#dg").datagrid("reload");
},error : function(msg) {
$.messager.alert("提示","操作失败","info");
$("#dg").datagrid("reload");
}
});
}
});
}
下面是后台controller代码
@RequestMapping(value = "/deleteStudentTeachClass")
public void deleteStudentTeachClass(String ids,HttpServletRequest request,HttpServletResponse response) throws Exception {
String dataBaseName = "itoo_platform";
String[] strArray = null;
strArray = ids.split(",");
Boolean flag = false;
String result = "false";
try {
flag = schoolTeachingBean.deleteStudentTeachClass(strArray,dataBaseName);
if (flag == true) {
result = "success";
}
} catch (RuntimeException e) {
e.printStackTrace();
}
outToJson.outJson(response,result);
}
通过查询发现dataType如下的说明:
"json": Evaluates the response as JSON and returns a JavaScript object. In jQuery 1.4 the JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. (See json.org for more information on proper JSON formatting.)
也就是说jquery1.4版本以后对json格 式要求非常严格,要满足json.org网站定义的格式才能执行success回调,否则都会出错,无法解析返回的json数据.我看了下返回到前台的字符串,的确不是严格的json格式.
于是把后台返回值改成了这样:
if (flag == true) {
result = "{\"result\":true}";
}
但无论返回true还是false都执行success回调,这让我更郁闷.百思不得其解.
最终把前台判断改成了这样:
if (rows) {
$.messager.confirm('警告',dataType : 'text',success : function(result) {
if(result=='true'){
$.messager.alert("提示","info");
$("#dg").datagrid("reload");
}
else{
$.messager.alert("提示","info");
$("#dg").datagrid("reload");
}
}
});
}
});
}
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。