JQuery JSONP随机生成回调函数

JQuery JSONP randomly generated callback function

本文关键字:回调 函数 JSONP 随机 JQuery      更新时间:2023-09-26

我正在使用JQuery来制作JSONP请求,并且文档非常令人困惑。

我有几个问题:

  • JSONP调用总是异步的,是正确的吗?那么async:false就被忽略了?
  • 如果指定了jsonpCallback参数,则在检索数据时执行该函数。但是紧接着,success回调也将被执行。Jquery建议不指定jsonpCallback函数(仅用于缓存?)这个函数与success函数的关系是什么?
  • 如果没有指定jsonpCallback,将创建一个随机回调函数并附加到window对象上。比如jQuery1360574548776335413_1776656584447,它的作用是什么?它是如何工作的?它和success函数有关系吗?
  • 是否从未调用error回调?

下面是我的代码:

(function($) {
    var url = "https://www.googleapis.com/books/v1/volumes/zyTCAlFPjgYC";
    $.ajax({
        type: 'GET',
        url: url,
        // JSONP always async?
        async: false,
        jsonp: "callback",
        jsonpCallback: 'jsonCallback',
        contentType: "application/json",
        dataType: 'jsonp',
        success: function(json) {
            console.dir(json);
        },
        // Error never called?
        error: function(e) {
            console.log(e.message);
        }
    });
})(jQuery);
function jsonCallback(json) {
    $(".test").html(json.volumeInfo.title);
}

JSONP调用总是异步的,这是正确的吗?所以async:false会被忽略吗?

是正确的

如果指定了jsonpCallback参数,则在检索数据时将执行此函数。但是紧接着,成功回调也会被执行。Jquery建议不要指定jsonpCallback函数(仅用于缓存?)这个函数与成功函数的关系是什么?

success函数是您的回调函数。Jquery通常生成一个随机的函数名。但是,如果您正在发出多个相同的请求,并且希望允许浏览器缓存调用,则可以指定该函数,这样就不会创建随机生成的函数。检查网络请求,你会看到(只要你的服务器设置支持它),如果你指定名称,你应该得到304 - Not Modified(编辑:在第一个之后的后续请求),而其他调用总是返回200 OK

如果没有指定jsonpCallback,将创建一个随机回调函数并附加到窗口对象。比如jQuery1360574548776335413_1776656584447,它的角色是什么?它是如何工作的?它和成功函数有关系吗?错误回调是否从未被调用?

回调函数应该包含您在success中放入的代码。如果实际请求有错误,例如无效的域名、401服务器响应等,则触发error事件。