這是一個同學出現的問題,問到了我。
應該是這樣的:

但問題是這樣的:

我看了所請求的格式和后台要求的也是相同的。而且我也是這種做法,為什么他的就不行呢?
打了幾遍 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對象。
