這是一個同學出現的問題,問到了我。
應該是這樣的:
但問題是這樣的:
我看了所請求的格式和后台要求的也是相同的。而且我也是這種做法,為什么他的就不行呢?
打了幾遍 JSON.parse 也都是不行……然后也不知道什么情況的耿耿於懷的回去了。
后來在網上搜索,結果都不是想要的。
把 callback 字符串截取掉,這個就不用說咯。這是一種把 json 弄出來的方法。但並不是要問的問題。要問的是:
為什么返回的數據前面會加上 callback ,括號里才是 json 內容。
知乎相似問題:
調用一個api,返回數據格式是:jsonCallback(括號里面才是json),該怎么處理?
百度知道相似問題:
如何在這組返回的數據中獲取data對應字符串中jsonCallBack函數並通過其調用?
var jsonback = function (json) { return json; }; var jsonObj = eval(obj.data); //或 var jsonStr = JSON.parse(obj.data.match(/^jsonback\((.*)\);$/)[1]);
csdn相似問題:
關於jsonp返回回來的數據怎么解析
jQuery18307755723037111298_1402151229915([{ "list": [{ "id": 1, "title": "title 1" }, { "id": 2, "title": "title 2" }, { "id": 3, "title": "title 3"}] }])

//jq的代碼是這樣子的 function loadInfo() { var url = "http://192.168.100.101:81/A.aspx"; $.ajax({ type: "get", async: true, url: url, dataType: "jsonp", jsonp: "callback", //服務端用於接收callback調用的function名的參數 success: function(data) { alert(data.list); //這個地方報錯是,不是一個函數 }, error: function() { alert("error"); } }); }
就沒幾個人回答 “為什么”,最多都在說 “怎么做”?
好吧。通過自己的研究。發現問題是這樣的:
如果把 dataType:"jsonp" 的 dataType 寫錯,就會出現這種情況。其實也相當於沒有傳 dataType 這個參數。
但是如果把 "jsonp" 寫錯,就觸發請求失敗的函數了 error:function(){} 。
那么問題又來了,像上面 csdn 中的 dataType 好像沒寫錯喲,那返回那樣的數據格式 jQuery...([]) 是什么鬼?我想,可能 () 括號前面的 jQuery... 就像 上面其他情況中的 callback、jsonback 一樣,相當於一種名字吧。 jsonp 和 json 是與之對應的。但 jQuery... 就不知道要如何與之對應了。所以就解析不了。
擴展閱讀:
$.getJSON()方法跨域 去取得服務器的json對象的時候,url的后綴最后帶一個"callback=?"的參數作為成功的回調函數;如:
var url = "${BIPJS}/intf/accountsOfRefuseEmail.jsp?act=add&siteId=${LANG.siteId}&accountId=${loginId}&callback=?"; $.getJSON(url, {} , function(data) { var code = data.code; if(code == 0){ $('#floatOne').myFadeIn(); } });
此時返回的data是一個json對象;相應地,服務器返回字符串應該要這種樣式:
String callback = T.stringValue(getRequestParams(request,"callback"),""); JSONObject jo = new JSONObject(); // put key/value in jo out.print(callback + "(" + jo + ")");
原理:Jquery在解析請求callback=?的時候,會自動生成一個callback=jsonp***的字符串,這個字符串jsonp***在成功回調的時候作為一個方法,被Jquey自動執行,參數是一個json格式的字符串(這里是data)。相應地;服務器返回的字符串要這種形式:jsonp***(JSONObject)。
如:剛上面的url被Jquey解析成:
-
Request URL:http://localhost.pcauto.com.cn:12385/intf/accountsOfRefuseEmail.jsp?act=add&siteId=2&accountId=388&callback=jsonp1381976698163&_=1381976708919
服務器返回的字符串形式:
jsonp1381976698163({"code":0,"msg":"增加用戶成功"})
Jquery的回調方法jsonp1381976698163(jsonStr)就是要把字符串jsonStr轉換成josn對象,這里就是轉換成data這個json對象。