4

我正在使用Firefox插件生成器。運行這段代碼的錯誤「回調沒有定義」jsonp回調錯誤

function callback(data) { 
    window.alert(data.status); 
} 

$.ajax({ 
    url: "http://apps.compete.com/sites/google.com/trended/rank/?apikey=210e634a0b3af972daa908a447c735c1&start_date=201112&end_date=201112&jsonp=?", 
    dataType: "jsonp", 
    jsonp: "jsonp", 
    jsonpCallback: "callback" 
}); 

這是API的文檔:https://www.compete.com/developer/documentation/

回答

3

我假設你是從內容腳本運行此。您必須考慮內容腳本不會真正在與網頁腳本相同的上下文中運行 - 網頁無法看到由內容腳本定義的功能,反之亦然(detailed description of this mechanism)。 JSONP通過在網頁中插入<script>標籤進行工作。該腳本將在網頁的上下文中運行 - 並且它不會看到您在內容腳本中定義的回調函數。

要你做的窗口上下文定義callback功能:

unsafeWindow.callback = function(data) 
{ 
    window.alert(data.status); 
}; 

但是,你應該採取warnings about unsafeWindow in the documentation嚴重,如果可能避免。使用request package擴展中的加載數據:

require("request").Request({ 
    url: "http://apps.compete.com/sites/google.com/trended/rank/?apikey=210e634a0b3af972daa908a447c735c1&start_date=201112&end_date=201112", 
    onComplete: function(response) 
    { 
    console.log(response.json); 
    } 
}); 

您可以然後通過usual messaging發送response.json到您的內容腳本。

+0

謝謝弗拉基米爾:像往常一樣,你的答案爲我解決了jsonp問題。我正在從內容腳本進行$ .jjax jsonp調用,並且回調沒有被解僱。 –

0

試試這個。

$.ajax({ 
    url: "http://apps.compete.com/sites/google.com/trended/rank/?apikey=210e634a0b3af972daa908a447c735c1&start_date=201112&end_date=201112&jsonp=?", 
    dataType: "jsonp", 
    success: function(data) { 
     window.alert(data.status); 
    } 
}); 
0

你不應該附加jsonp=?到您的網址,這是由AJAX功能來完成。只有

用途:

url: "http://apps.compete.com/sites/google.com/trended/rank/?apikey=<your-api-key>&start_date=201112&end_date=201112", 
0

事實上,爲應對馬塞洛·迪尼茲,任何人都試圖獲得競爭API工作:
您需要&jsonp=?添加到您的網址,否則你的Ajax請求總是失敗。

由於來自競爭的文檔含糊不清,我一直在爲此苦苦掙扎。