Вопрос по jsonp, javascript, jquery – JQuery JSONP не вызывает обратный вызов
У меня проблемы с jsonp и jquery.
Это мой код -
var myCallback = function(data) {
console.log(data);
};
$.ajax({
url: my_url,
type: 'GET',
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback: 'myCallback'
});
JQuery добавляет что-то вроде?callback=myCallback&_=1340513330866
my_url и данные, возвращаемые из my_urlmyCallback('abcd')
- хотя на самом деле он будет возвращать некоторый HTML-код вместоabcd
.
Проблема:abcd
не вошел в консоль черезmyCallback
, Так что я делаю не так? У меня сложилось впечатление, что возвращенные данные будут выполнены так, как они есть внутри тегов скрипта?
myCallback
должен быть глобальным ... не так ли?
Felix Kling
Удалите одинарную кавычку из вызываемого метода, это будет работать, пожалуйста, проверьте код здесь,
var myCallback = function(data) {
console.log(data);
};
$.ajax({
url: my_url,
type: 'GET',
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback: myCallback
});
Попробуй этоиграть на скрипке
undefined
... который ничего не доказывает. Вы даже не использовали URL JSONP для скрипки. Если вы посмотрите на инструменты разработчика (вкладка «Сеть», если предположить, что в Chrome) вы увидите, что запрос вообще не сделан ... Ajax-вызов не выполняется. Для ясности: появляется предупреждение, потому что jQuery вызывает функцию, которую вы назначаетеjsonpCallback
to get the callback nameтак же, как сказано в документации. этоnot вызывается в ответ на успешный вызов Ajax.
1) переместить одинарную кавычку из вызываемого метода (как написал Умеш Аавте)
2) сделать обратный вызов глобальным
3) Ваш обратный вызов теперь является частью jQuery, поэтомуthis это ваш способ получить ваши данные
в дальнейшем решение: (используя jQuery: v3.3.1, узел: v6.10.0, экспресс: v4.16.3
window.myCallback = function() {
console.log(this.data);
}
$.ajax({
url: my_url,
type: 'GET',
dataType: 'jsonp',
jsonp: 'myCallback',
jsonpCallback: myCallback
});
это все люди!
Если вы используете свою собственную функцию, то вы должны явно объявить ее какglobal, Например:
window.myCallback = function(data) {
console.log(data);
};
Explanation
Каждая функция, которая должна вызываться в ответ на успешный запрос JSONP, должна быть глобальной. JQuery делает это тоже. Это потому, что JSONP - это не что иное, как включение (динамически генерируемого (чаще всего)) файла JavaScript с<script>
тег, который содержит только вызов функции. Поскольку каждый скрипт оценивается в глобальной области видимости, вызываемая функция также должна быть глобальной.