[英]Getting json on cross domain with jsonp using jquery
我有一個非常簡單的$ .ajax調用,該調用假定是從給定的URL獲取json數據。 當前,URL確實會被調用,並且數據確實會返回,但是localHsonpCallback函數似乎沒有被觸發。
這是我的代碼。
function getBuildings(){
$.ajax({
url: 'http://localhost/api/users',
type: "GET",
dataType: "jsonp",
jsonpCallback: "localJsonpCallback"
});
}
function localJsonpCallback(json) {
console.log("Fired");
if (!json.Error) {
console.log("Fired");
}
else {
console.log("ERROR");
}
}
因此,如上所述,出於某種原因,localJsonpCallback似乎根本沒有被解雇。
另外我應該提到,在我的Chrome開發工具中,請求鏈接最終看起來像這樣
http://localhost/api/users?callback=localJsonpCallback&_=1429708885454
在這個問題上的任何幫助將不勝感激。
謝謝。
直接在參數列表中嘗試將回調方法作為匿名函數使用。
function getBuildings(){
$.ajax({
url: 'http://localhost/api/users',
type: "GET",
dataType: "jsonp",
jsonpCallback: function(data){
console.log("Fired");
if (!data.Error) {
console.log("Fired");
}
else {
console.log("ERROR");
}
}
});
}
如果您沒有將回調附加到url上,則可以將jsonp oprion設置為false,然后在執行操作時,在選項中設置回調。
function getBuildings(){
$.ajax({
url: 'http://localhost/api/users',
type: "GET",
dataType: "jsonp",
jsonp: false,
jsonpCallback: "localJsonpCallback"
});
}
由於javascript是順序的,因此在調用函數之前定義它們也是一個好主意。 即-在ajax調用之前定義回調函數。
http://api.jquery.com/jQuery.ajax/
jsonp
類型:
字符串覆蓋JSONP請求中的回調函數名稱。 這個值將被用來代替'callback'
在'callback=?'
網址中查詢字符串的一部分。 因此{jsonp:'onJSONPLoad'}
將導致'onJSONPLoad=?'
傳遞給服務器。 從jQuery 1.5開始,將jsonp選項設置為false可防止jQuery將"?callback"
字符串添加到URL或嘗試使用"=?"
進行轉化。 在這種情況下,您還應該顯式設置jsonpCallback設置。 例如,{ jsonp: false, jsonpCallback: "callbackName" }
也許這段代碼將有助於解決您的問題:
$.ajax({
type: 'GET',
url: 'http://localhost/api/users',
data:{todo:"jsonp"},
dataType: "jsonp",
crossDomain: true,
cache:false,
success: success,
error:function(jqXHR, textStatus, errorThrown){
alert(errorThrown);
}
});
var success = function(data){
/* parse JSON */
data = $.parseJSON(data);
//your code here
};
這是服務器端的問題,即回調參數未正確使用,或者它們正在尋找不同的服務器端的參數名稱callback
不存在。
您說結果正在返回,格式是什么? JSONP必須返回不是純數據的腳本塊,因此請確保結果采用以下格式。
{callbackFunctionName}({hugeDataFromServer});
基本上是腳本調用您的函數。
如果不是服務器端,則意味着它們更有可能使用其他名稱作為callback
參數,例如cb
, _callback
等
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.