Я использую конструктор аддонов Firefox. Запуск этого кода с ошибками "обратный вызов не определен"
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/
Ответ 1 · рейтинг 3 · Wladimir Palant
Я предполагаю, что вы запускаете это из сценария контента. Вы должны учитывать, что сценарии содержимого на самом деле не работают в том же контексте, что и сценарии веб-страницы - веб-страница не может видеть функции, определенные сценариями содержимого, и наоборот (подробное описание этого механизма). JSONP работает, вставляя тег <script> на веб-страницу. Этот сценарий будет работать в контексте веб-страницы и не увидит функцию обратного вызова, которую вы определили в сценарии содержимого.
Чтобы определить функцию callback в контексте окна, выполните следующие действия:
unsafeWindow.callback = function(data)
{
window.alert(data.status);
};
Однако вам следует взять ссылку предупреждения о unsafeWindow в документации серьезно и по возможности избегайте их. Используйте пакет request в вашем расширении для загрузки данных:
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);
}
});
Затем вы можете отправить response.json в сценарий контента через обычный обмен сообщениями.
Ответ 2 · xdazz
Попробуй это.
$.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);
}
});
Ответ 3 · Marcelo Diniz
Вы не должны добавлять jsonp=? к своему URL-адресу, это делается функцией ajax.
Использовать только:
url: "http://apps.compete.com/sites/google.com/trended/rank/?apikey=<your-api-key>&start_date=201112&end_date=201112",
Ответ 4 · Devin Gleason Lambert
На самом деле, в ответ Марсело Динизу и всем, кто пытается заставить работать конкурирующий API:
Вам нужно добавить &jsonp=? к вашему URL-адресу, иначе ваш запрос ajax всегда будет завершаться ошибкой.
Некоторое время я боролся с этим, потому что документы от соревнования были расплывчатыми.