ajax中dataType="json",執行後卻進入error函式中,無法解析json
阿新 • • 發佈:2019-02-20
我先把問題的關鍵說出來:一定要使用嚴格的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格式!
也就是說必須要這種格式的:
{ "鍵" : "值" , "鍵" : "值" } ;