JQuery JSONP随机生成回调函数

时间:2013-05-06 03:12:24

标签: javascript jquery dom callback jsonp

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

1 个答案:

答案 0 :(得分:1)

JSONP调用始终是异步的,这是正确的吗?那么async:false会被忽略吗?

  

这是正确的

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

  

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

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

  

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