加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax不执行success回调而是执行error回调

发布时间:2020-12-16 01:55:21 所属栏目:百科 来源:网络整理
导读:调试代码遇到一个问题,就是前台执行删除操作后,controller返回数据,但前台接收时,ajax不执行success回调,总是弹出失败的对话框.接收数据类型是json. 先看看我的前台代码. if (rows) {$.messager.confirm('警告','确定删除吗?',function(r) {if (r) {$.ajax({

调试代码遇到一个问题,就是前台执行删除操作后,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");
								}
						}						

					});
				}
			});
		}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读