【问题标题】:Why isn't jQuery automatically appending the JSONP callback?为什么 jQuery 不自动附加 JSONP 回调?
【发布时间】:2011-01-25 18:33:13
【问题描述】:

$.getJSON() 文档指出:

如果指定的 URL 在远程服务器上,则请求被视为 JSONP。有关详细信息,请参阅 $.ajax() 中对 jsonp 数据类型的讨论。

jsonp 数据类型状态的$.ajax() 文档(重点是我的):

使用 JSONP 加载到 JSON 块中。 会增加一个额外的“?callback=?”到 URL 的末尾以指定回调

所以看来,如果我用跨域 URL 调用 $.getJSON(),额外的“callback=?”参数应自动​​添加。 (文档的其他部分支持这种解释。)

但是,我没有看到这种行为。如果我不添加“回调=?”明确地,jQuery 错误地生成了一个 XMLHttpRequest(它返回空数据,因为我无法跨域读取响应)。如果我明确添加它,jQuery 会正确地发出

这是一个例子:

var URL = "http://www.geonames.org/postalCodeLookupJSON" +
    "?postalcode=10504&country=US";

function alertResponse(data, status) {
  alert("data: " + data + ", status: " + status);
}

$.getJSON(URL, alertResponse);
// alerts "data: null, status: success"

$.getJSON(URL + "&callback=?", alertResponse);
// alerts "data: [object Object], status: undefined"

那么发生了什么?我是否误解了文档或忘记了什么?

不用说这没什么大不了的,但我正在创建一个 Web API,我特意将回调参数设置为“回调”,希望能很好地适应 jQuery 的使用。

谢谢!

(如果您有兴趣,请在 jQuery 论坛中编辑:我 cross-posted this。)

【问题讨论】:

    标签: jquery jsonp


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      试试这个:

      var URL = "http://www.geonames.org/postalCodeLookupJSON" +
          "?postalcode=10504&country=US";
      function alertResponse(data, status) {
          alert("data: " + data + ", status: " + status);
      }
      $.ajax({
          url: URL,
          dataType: 'jsonp',
          jsonpCallback: 'alertResponse',
      });
      

      【讨论】:

      • 在您的示例中,您实际上是指jsonpCallback: 'alertResponse',是的,这样就可以工作,而无需我显式添加“回调=?”范围。但这比$.getJSON() 的优雅要冗长得多。如果$.getJSON() 能按照文档说明工作就好了……
      【解决方案3】:

      是的,我想你误会了。如文档所述,$.getJSON$.ajax({datatype: 'json'.... 的快捷方式。除非您添加 callback=? 参数,否则它永远不会进行 JSONP 调用。

      【讨论】:

      • 嗯...我真的误会了吗?我引用的那句话非常明确:“如果指定的 URL 在远程服务器上,则请求被视为 JSONP。”
      【解决方案4】:

      我正在使用下面的代码,

      $.ajax({ 网址:网址, 数据类型:'jsonp', 成功:函数(数据) { // 做一点事 } 错误:函数(jqXHR,textStatus,errorThrown){}, jsonpCallback: 'login_callback', });

      但是,回调有时会附加在 url 的末尾,有时不会在 IE 中。 虽然它在 chrome 和 FF 中运行良好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-03
        • 2013-02-16
        • 2013-02-24
        • 1970-01-01
        • 2013-01-10
        • 2012-03-23
        • 1970-01-01
        • 2012-05-30
        相关资源
        最近更新 更多