ajax中dataType="json",执行后却进入error函数中,无法解析json

我先把问题的关键说出来:一定要使用严格的JSON格式!!!

                                             一定要使用严格的JSON格式!!

                                             一定要使用严格的JSON格式!

贴出来我的前台代码:

$.ajax({
	url : "${basePath}map/getAccident",
	data : {},
	type : "post",
	dataType : 'json',
	error: function() { alert("Jquery Ajax request error!!!"); },
	success : function(data) {
		if(data){
			$("#accident_txt").html(
				"事故名称:"+data.name+"
"+ "事故地点:"+data.address+"
"+ "发生时间:"+data.time+"
"+ "坐标经度:"+data.longitude+"
"+ "坐标纬度:"+data.latitude+"
"+ "事故描述:"+data.desc ); } } });

后台代码:

public void getAccident(HttpServletRequest request, HttpServletResponse response){
	String json = null;
	if(Accident.isChanged()){
		json = "{" +
			"name: '" + Accident.name + "', "+
			"address: '" + Accident.address + "', "+
			"time: '" + Accident.time + "', "+
			"longitude: '" + Accident.longitude + "', "+
			"latitude: '" + Accident.latitude + "', "+
			"desc: '" + Accident.desc + "'"+
			"}";
	}
	Tools.returnResultAjax(response, json);
}


在上面的代码的基础上执行,前端每次都会进入到error函数中。

之前写ajax的时候,一直都是用的dataType="text",然后解析的时候用 eval() 。也就是执行完的返回结果是String类型的,然后用Jquery的 eval函数再解析字符串型的json。


这次决定使用dataType=“json”,但还是行不通。查了几篇文章:

http://bbs.csdn.net/topics/330144067

https://www.oschina.net/question/152421_21727

两篇提问下面的回答中,都提到了要使用严格的JSON格式才可以,其中关键的回答我贴出来:

你的JSON格式不正确,jquery 1.4以后对json格式变严格了,少了双引号
resp.getWriter().write("{total:100,info:\"ttttttttt\"}");

resp.getWriter().write("{\"total\":\"100\",\"info\":\"ttttttttt\"}");

也就是说必须要这种格式的
{"键":"值","键":"值"};

像原来的
{键:值,键:值}
{'键':'值','键':'值'}

这种都是错误的,不合标准,所以jquery返回error

JSON格式错误,必须严格按照格式来,属性页必须加双引号。

评论(0)| 引用此答案| 举报 (2014-04-29 15:43)

我的json属性名没有加双引号,属性值用的是单引号,结果怎么调试都是错的,把他们都加上双引号后就对了
评论(0)| 引用此答案| 举报 (2014-05-16 10:53)

按照上面说的,我把后台拼接json的代码改了:

@RequestMapping("/getAccident")
public void getAccident(HttpServletRequest request, HttpServletResponse response){
	String json = null;
	if(Accident.isChanged()){
		json = "{" +
			"\"name\": \"" + Accident.name + "\", "+
			"\"address\":\"" + Accident.address + "\", "+
			"\"time\":\"" + Accident.time + "\", "+
			"\"longitude\":\"" + Accident.longitude + "\", "+
			"\"latitude\":\"" + Accident.latitude + "\", "+
			"\"desc\":\"" + Accident.desc + "\""+
			"}";
	}
	Tools.returnResultAjax(response, json);
}
改完了就可以顺利执行了!


总结:

使用JQuery的ajax中,dataType返回数据使用json,后台传过来的一定是严格的JSON格式!

也就是说必须要这种格式的:

{ "键" : "值" , "键" : "值" } ;




你可能感兴趣的:(前端)