【问题标题】:Why does jQuery ajax (JSONP) work without `&callback=` but fails with `&callback=functionname`为什么 jQuery ajax (JSONP) 在没有 `&callback=` 的情况下工作,但在 `&callback=functionname` 下失败
【发布时间】:2012-03-16 10:30:59
【问题描述】:

我需要进行 JSONP 调用。

Ajax 函数调用:

$.ajax({
    url: myPath,
    dataType: 'jsonp',
    success: function(data) {
        alert("hello"); 
    }
});

getJSON 函数调用:

$.getJSON(myPath + '&callback=prova?', function(data) {
    alert("hello");
});

使用 getJSON(使用 &callback=prova 设置 JSONP 协议)我收到错误 200。 .ajax() 也可以。为什么?我想在这里使用getJSON...

【问题讨论】:

  • 查询字符串末尾的问号看起来不对。
  • AFAIK 代码 200 不应该是错误,see here)
  • 您是否在服务器端检查了两种情况下都发出了相同的请求?如果是你的服务器,你应该能够在日志中找到 URL,否则你总是可以求助于网络嗅探。
  • @themarcuz 在检索 JSONP 时,您有时会看到请求的 200 OK HTTP 代码,但浏览器会给您一个 XSS 错误,因为它会阻止数据被处理。
  • 哦,是的,200 应该不是错误。您的样本不包括任何状态/错误检查。你能展示你的实际测试代码吗?

标签: jquery ajax json jsonp


【解决方案1】:

如果您希望您的请求被视为 JSONP,您应该使用 callback=? 而不是 callback=prova?

$.getJSON(myPath + '&callback=?', function(data) {
    alert("hello");
});
​

【讨论】:

    【解决方案2】:

    试试这个

    $.getJSON(myPath + '?callback=prova', function(data) {
        alert("hello");
    });
    

    【讨论】:

    • 这不起作用,因为 jQuery 使用自己的自定义回调名称(每次调用 ajax 函数时都是唯一且不同的)。它必须是“&callback=?”(实际上可以省略,因为 jQuery 会检测到不同的主机名并为您附加&callback=1)。然后,jQuery 将用正确的回调函数名称替换 ?
    猜你喜欢
    • 2017-11-28
    • 1970-01-01
    • 2012-10-03
    • 2019-02-25
    • 1970-01-01
    • 2013-08-25
    • 2017-04-19
    相关资源
    最近更新 更多