Я пытаюсь получить jsonp работу обратного вызова с помощью jQuery в рамках сценария механика. Вот мой 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"]
Однако моя функция успеха никогда не вызывается, и консоль поджигателя дает мне ошибку при высказывании jsonp1276109314602 is not defined
.
Что я делаю неправильно?
ОБРАТИТЕ ВНИМАНИЕ, что я выполняю этот вызов из сценария механика на craigslist странице. Это - междоменный запрос, но я вижу, что запрос на самом деле добирается до сервера и возвращает хороший ответ, но по любой причине зарегистрированный обратный вызов, который создает jQuery, кажется, не существует, когда ответ возвращается. Это хорошо работает, если я запускаю скрипт в консоли поджигателя от craigslist страницы, но не, когда это выполняется из сценария механика.
Оказывается, вам нужно немного поиздеваться над (каламбур), чтобы заставить его работать внутри скрипта greasemonkey.
Подробный ответ можно найти здесь: jQuery.getJSON внутри пользовательского скрипта greasemonkey .
Краткий ответ - отказаться от подхода JSONP и включить это в свой скрипт:
// @require http://courses.ischool.berkeley.edu/i290-4/f09/resources/gm_jq_xhr.js
Не уверен, что я все это понимаю, но, тем не менее, он работает как чемпион, и я могу делать междоменные запросы из моего скрипта.
Вы уже пробовали:
$.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.