Метод обратного вызова JSONP не определен - PullRequest
5 голосов
/ 09 июня 2010

Я пытаюсь заставить работать обратный вызов jsonp, используя jquery в скрипте greasemonkey. Вот мой JQuery:

$.ajax({
    url: "http://mydomain.com/MyWebService?callback=?",
    data: { authkey: "temphash" },
    type: "get",
    dataType: "json",
    cache: false,
    success: function(data) {
        console.log(data);
    }
});

в моем веб-сервисе (asp.net) Я возвращаю ответ с типом контента application/javascript. Ответ, который сервер фактически отправляет обратно:

jsonp1276109314602({"message":"I'm getting tired of this not working"})

Имя метода jsonp1276109314602 генерируется случайным образом с помощью jquery, и я получаю его с помощью Request.QueryString["callback"]

Однако моя функция успеха никогда не вызывается, и консоль firebug выдает ошибку «1012 *.

».

Что я делаю не так?

Примечание Я делаю этот вызов из сценария greasemonkey на странице Craigslist. Это междоменный запрос, но я могу видеть, что запрос фактически делает его на сервере и возвращает хороший ответ, но по какой-либо причине зарегистрированный обратный вызов, создаваемый jquery, кажется, не существует, когда ответ возвращается. Он работает нормально, если я запускаю скрипт в консоли firebug со страницы craigslist, но не тогда, когда он запускается из скрипта greasemonkey.

Ответы [ 3 ]

3 голосов
/ 10 июня 2010

Вы уже пробовали:

$.ajax({
    url: "http://mydomain.com/MyWebService",
    data: { authkey: "temphash" },
    type: "get",
    dataType: "jsonp",
    cache: false,
    success: function(data) {
        console.log(data);
    }
});

Из документов :

"jsonp": загрузка в блок JSON с использованием JSONP.Добавит дополнительный "? Callback =?"в конце вашего URL, чтобы указать обратный вызов.

Я не исследовал исходный код jQuery, но возможно, что функция обратного вызова не будет создана, если вы не укажете jsonp для параметра dataType.

2 голосов
/ 10 июня 2010

Оказывается, вы должны сделать некоторые дополнительные обезьяны вокруг (каламбур), чтобы заставить его работать внутри скрипта greasemonkey.

Длинный ответ можно найти здесь: jQuery.getJSON внутри пользовательского скрипта greasemonkey .

Краткий ответ - отказаться от подхода JSONP и включить его в свой сценарий:

// @require http://courses.ischool.berkeley.edu/i290-4/f09/resources/gm_jq_xhr.js

Не уверен, что я все это понимаю, но, тем не менее, он работает как чемпион, и я могу делать междоменные запросы из моего скрипта.

1 голос
/ 05 ноября 2010

Я думаю, что вы должны использовать 'jsonpCallbackString' вместо 'success'.

http://api.jquery.com/jQuery.ajax/

...