的問題是,你這是在強迫jQuery來使用特定的JSONP回調函數的名字,callback
,使用此選項:
jsonpCallback: 'callback'
所以,如果你有重疊的JSONP調用,jQuery將嘗試使用相同的函數在您的頁面上處理每個函數的結果,並在函數完成其請求時刪除該函數。這顯然有點問題,請求之間相互踩踏。
刪除該選項並允許jQuery創建自己的函數名稱。它將確保函數名稱對每個請求都是唯一的。
在評論下面你說過:
When I remove the jsopCllback parameter I mreceving this error in browser ReferenceError: callback is not defined
而且你看到什麼回來,當你刪除jsonpCallback: 'callback'
的說法是:
callback({ "status": 0, "item": 20, "contents": [ { "new1": 196, "new2": 1, "new3": 2, "new4": "abcd", "new5": 41, "new6": "aadsa", } ] }
這意味着JSONP服務您我們正在討論爲名稱使用非標準查詢字符串參數名稱來提供回調,因此它忽略了jQuery使用的標準查詢字符串參數名稱。您必須找出他們期望回調名稱的參數名稱,並將jsonp: 'argNameTheyUse'
選項用於ajax
。
標準參數名是callback
,例如:
http://example.com/getsomething?callback=foo
...含義使用回調名稱foo
。但是,一些API使用不同的參數,如:
http://example.com/getsomething?mySpecialCallbackArg=foo
如果你調用一個端點,你需要在ajax
的jsonp: 'mySpecialCallbackArg'
選項。
在進一步的評論中,你說你不能指向API文檔,因爲它是「私人的」。如果它是「私人」的,就像它是你或你公司控制的東西一樣,那麼很好,修復它,以便它遵守callback
查詢字符串參數,並將它用作JSONP響應中的函數名稱。這就是JSONP的工作原理。
例如,如果你把它這個請求:
http://example.com/getsomething?callback=foo
...有代碼生成的響應使用foo
作爲JSONP回調名稱:
foo({
"data": "here"
})
如果查詢:
http://example.com/getsomething?callback=bar
然後用bar
代替:
bar({
"data": "here"
})
這樣,當你進行多個重疊調用時,jQuery可以爲每個調用賦予一個唯一的函數,並且它們最終不會相互踩踏。
如果由於某種原因,您不能不能做到這一點(?!),那麼您必須串聯(而不是並行)串聯您的呼叫。
您打電話給API的文檔在哪裏?它似乎使用非標準的參數。 –