1. 程式人生 > >ajax中dataType="json",執行後卻進入error函式中,無法解析json

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+"<br/>"+
				"事故地點:"+data.address+"<br/>"+
				"發生時間:"+data.time+"<br/>"+
				"座標經度:"+data.longitude+"<br/>"+
				"座標緯度:"+data.latitude+"<br/>"+
				"事故描述:"+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”,但還是行不通。查了幾篇文章:

兩篇提問下面的回答中,都提到了要使用嚴格的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格式!

也就是說必須要這種格式的:

{ "鍵" : "值" , "鍵" : "值" } ;