ошибка обратного вызова jsonp - PullRequest
4 голосов
/ 22 января 2012

Я использую аддон 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/

Ответы [ 4 ]

3 голосов
/ 23 января 2012

Я предполагаю, что вы запускаете это из скрипта контента.Необходимо учитывать, что скрипты контента на самом деле не работают в том же контексте, что и скрипты веб-страницы - веб-страница не может видеть функции, определенные скриптами контента, и наоборот ( подробное описание этого механизма ).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 в ваш скрипт контента через обычные сообщения .

0 голосов
/ 17 февраля 2016

На самом деле, в ответ Марсело Диниз, и любой, кто пытается заставить работать API конкурирующих:
Вам необходимо добавить &jsonp=? к вашему URL, иначе ваш ajax-запрос всегда будет неудачным.

Я боролся с этим какое-то время, потому что документы по соревнованиям были расплывчаты.

0 голосов
/ 22 января 2012

Не следует добавлять jsonp=? к вашему URL, это делается с помощью функции ajax.

Только для использования:

url: "http://apps.compete.com/sites/google.com/trended/rank/?apikey=<your-api-key>&start_date=201112&end_date=201112",
0 голосов
/ 22 января 2012

Попробуйте это.

$.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);
    }
});
...