0

我正在使用 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);
}
4

1 回答 1

1

JSONP 调用始终是异步的,对吗?所以 async:false 会被简单地忽略吗?

那是对的

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

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

如果未指定 jsonpCallback,则会创建一个随机回调函数并将其附加到窗口对象。像jQuery1360574548776335413_1776656584447这样的东西,它的作用是什么?它是如何工作的?它与成功功能有什么关系吗?错误回调从未被调用过吗?

该回调函数应该包含您成功输入的代码。如果实际请求出现错误,例如无效的域名、401 服务器响应等,则会触发 error 事件。

于 2013-05-06T05:15:59.050 回答