Метод обратного вызова JSONP не определяется

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

5
задан Micah 9 June 2010 в 19:07
поделиться

2 ответа

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

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

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

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

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

2
ответ дан 14 December 2019 в 13:26
поделиться

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

$.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.

3
ответ дан 14 December 2019 в 13:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: