2012-06-24 175 views
8

我有jsonp和jquery的問題。jQuery JSONP不調用回調

這是我的代碼 -

var myCallback = function(data) { 
    console.log(data); 
}; 

$.ajax({ 
    url: my_url, 
    type: 'GET', 
    dataType: 'jsonp', 
    jsonp: 'callback', 
    jsonpCallback: 'myCallback' 
}); 

jQuery的增加類似?callback=myCallback&_=1340513330866到my_url將數據從my_url返回的myCallback('abcd') - 雖然在現實中,它會代替abcd的一些返回的HTML代碼。

問題:abcd未通過myCallback登錄到控制檯。那麼我做錯了什麼?我的印象是,返回的數據會在腳本標籤內執行嗎?

+0

你可以發佈響應的例子,你想 – matt3141

+1

'myCallback'必須是全球性的......是什麼呢? –

回答

16

,那麼你必須明確地聲明爲global。例如:

window.myCallback = function(data) { 
    console.log(data); 
}; 

DEMO


說明

每一個應該響應成功JSONP請求,調用函數必須是全球性的。 jQuery也是這樣做的。這是因爲JSONP只是包含一個(動態生成的(大部分時間))帶有<script>標記的JavaScript文件,它只包含一個函數調用。由於每個腳本都在全局範圍內進行評估,所以調用的功能也必須是全局的。

+0

你節省了我的時間。謝謝 – jasper

+0

@ Felix - 謝謝,你給的例子幫了我很多。 +10; – Aviator

+0

它的工作原理,謝謝! – shaosh

-1

取下調用的方法,這將工作單引號,請檢查這裏的代碼,

var myCallback = function(data) { 
     console.log(data); 
    }; 

$.ajax({ 
    url: my_url, 
    type: 'GET', 
    dataType: 'jsonp', 
    jsonp: 'callback', 
    jsonpCallback: myCallback 
}); 

如果使用自己的函數試試這個fiddle

+0

這是行不通的。從文檔:*「截至jQuery 1.5,你也可以使用這個設置的函數,在這種情況下,jsonpCallback的值被設置爲該函數的返回值**。」*。你的小提琴沒有正確安裝,所以我不知道它應該演示什麼。 –

+0

但是,當我嘗試它的樣本工作時,我也添加了一個工作小提琴,你可以檢查我已經添加的小提琴 –

+0

正如我所說,我不知道你的演示應該顯示什麼。它只顯示「未定義」的警報......沒有任何證據。您甚至沒有爲小提琴使用JSONP網址。如果你看看開發者工具(Network標籤,假設Chrome),你會發現根本沒有請求...... Ajax調用不會發生。要清楚:Te提示出現是因爲jQuery正在調用您分配給'jsonpCallback' **的函數來獲取回調名稱**,就像文檔所述。對於成功的Ajax調用,它沒有被**調用。 –

0

爲什麼不乾脆:

$.getJSON(my_url, myCallback); 

這將處理函數的範圍,並且看起來更簡單

+0

這不適用於Jsonp –