【问题标题】:JQuery JSONP randomly generated callback functionJQuery JSONP随机生成回调函数
【发布时间】:2013-04-29 18:43:17
【问题描述】:

我正在使用 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 在幕后的实际工作方式,可能会有所帮助。 en.wikipedia.org/wiki/JSONP
  • 谢谢,是的,我已经阅读了几篇关于它的文档。我发现 JQuery API 非常难以理解。尤其是随机生成的回调
  • 这里是一个简单的手工JSONP函数,它可能会让你更好地理解。 jsfiddle.net/Axema 您还应该查看在浏览器中发出的请求,这样您就可以准确地看到响应的样子。它基本上只是一个正在运行的脚本。
  • 我知道,谢谢 :) 我非常了解 JSONP 的工作原理、研究和实验。我没有完全理解 jQuery JSONP 参数和行为。

标签: javascript jquery dom callback jsonp


【解决方案1】:

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

没错

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

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

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

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

【讨论】:

  • 我看到了一些困惑:1)如果我指定一个 callbacksuccess 在定义的 callback 之后仍然会被调用,为什么?我应该删除success 吗? 2)如果我没有指定 callback random gen。回调 是我的success?所以随机生成。函数 只调用success?我在哪里可以阅读它? 3)“那个回调函数应该包含你成功输入的代码。”:模糊点。 4)根据jQuery关于Error:“注意:跨域脚本和跨域JSONP请求不调用此处理程序。这是一个Ajax事件。”
猜你喜欢
  • 2013-01-31
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 2016-10-08
  • 2011-11-15
  • 1970-01-01
  • 2014-07-03
  • 2019-12-07
相关资源
最近更新 更多