2010-06-09 6 views
5

Я пытаюсь получить обратный вызов jsonp, работающий с использованием jquery внутри сценария greasemonkey. Вот мой JQuery:Метод обратного вызова JSONP не определен

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

в моем WebService (asp.net) Я возвращаю ответ с типом содержимого application/javascript. Ответ сервер фактически отправляет обратно:

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

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

Однако моя функция успеха никогда не называется и поджигателем консоль дает мне сообщение об ошибке jsonp1276109314602 is not defined.

Что я делаю неправильно?

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

+0

Вы встраивание JQuery в GreaseMonkey сценария или загружая его отдельно? – James

+0

... Или, jQuery уже доступен на странице, которую вы улучшаете? – James

+0

Я загрузил его через скрипт greasemonkey – Micah

ответ

2

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

Длинный ответ можно найти здесь: jQuery.getJSON inside a greasemonkey user script.

Короткий ответ угробить подход JSONP и включить это в скрипте:

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

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

+1

Если вам интересно, как работает скрипт 'gm_jq_xhr.js', вы можете прочитать [объяснение] (http://ryangreenberg.com/archives/2010/03/greasemonkey_jquery.php), который я написал. – Ryan

3

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

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

От docs:

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

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

Смежные вопросы