2012-02-11 123 views
2

我正在使用jQuery進行跨域AJAX請求,但我的回調函數沒有觸發(請參閱http://jsfiddle.net/zC8z5/)。jQuery JSONP回調沒有觸發

function jsonpCallback(response){ 
    $('#code').text(response.data); 
} 

$.ajax({ 
    url: url, 
    dataType: 'jsonp', 
    error: function(xhr, status, error) { 
     alert(error); 
    }, 
    success: function() { 
     alert("success");        
    }, 
    jsonp: false, 
    jsonpCallback: 'jsonpCallback' 
}); 

作爲每文檔:

在jQuery 1.5的,設置JSONP選項設置爲false防止jQuery的 從將字符串的URL或試圖使用 「= 「回調?」 ?」進行轉化。在這種情況下,您還應該明確設置 jsonpCallback設置。例如,{JSONP:假的,jsonpCallback: 「callbackName」}

但是,如果我不指定一個回調,而是隻在處理它的工作原理成功事件中的數據(見http://jsfiddle.net/2gBRT/)。

$.ajax({ 
    url: url, 
    dataType: 'jsonp', 
    error: function(xhr, status, error) { 
     alert(error); 
    }, 
    success: function(data) { 
     jsonpCallback(data); 
    } 
}); 

我誤解了如何使用jQuery製作JSONP請求嗎?

回答

7

正如您在摘錄的文檔中指出的那樣,如果服務器期望一個名爲callback的參數,jQuery足夠聰明,可以爲您填充空白。到位桶不使用此參數的名稱,所以你得到像URL:

https://api.bitbucket.org/.../?callback=jquery1234_5678 

jquery1234_5678實際上是爲您的回調自動生成的函數名。 Bitbucket然後返回類似於:

jquery1234_5678({ 
    "node": "someId", 
    "path": "filename", 
    "data": "content" 
}) 

所以函數被調用。此外,您還可以簡化(demo)的成功部分:

success: jsonpCallback 

如果到位桶與預期不同的參數名稱,你會使用它作爲JSONP的價值。因此,舉例來說,如果你通過:

jsonp: "functionName" 

的URL看起來像:

https://api.bitbucket.org/.../?functionName=jquery1234_5678 

,但他們的迴應是一樣的。如果你不想讓jQuery生成函數名,你只需要jsonpCallback