【问题标题】:ajax cross domain request doesn't call callbacksajax跨域请求不调用回调
【发布时间】:2014-12-23 20:29:04
【问题描述】:

我一直在尝试使用 jquery 来处理跨域请求,但是尽管请求成功,但浏览器抱怨无法解析结果。 我知道 JsonP 附加了一个回调参数,但是关于 SO 的所有问题都没有阐明回调是如何被实际调用的。 有人可以澄清 JsonP 的回调是如何执行的并帮助我解决这个问题。

<body>
    <ul id="tweets">Test</ul>
</body>

Javascript

        window.myCallback = function(data) {
            console.log(data);
            $("#tweets").append("<div>Hello</div>");
        };

        $(document).ready(function(){

            $.ajax({
              url: 'http://www.netflix.com',
              type: 'GET',
              dataType: 'jsonp',
              jsonp: 'callback',
              jsonpCallback: 'myCallback',
                      contentType: 'text/html',
                    success: function (data) {
                        alert(data);
                    }
            });

        });

我这里也有一个 JsFiddle http://jsfiddle.net/3yVC7/

所以在这个例子中,我只想在调用回调时修改“tweets”div,但它永远不会被调用。任何帮助将不胜感激。非常感谢。

【问题讨论】:

  • 如果你想使用在 window 上定义的回调,你必须使用 getScript 来代替。

标签: ajax jquery cross-domain


【解决方案1】:

去掉回调函数周围的引号:

    var myCallback = function(data) {
        console.log(data);
        $("body").append("<div>Hello</div>");
    };

    $(document).ready(function(){

        $.ajax({
          url: 'http://www.google.com',
          type: 'GET',
          dataType: 'jsonp',
          jsonp: 'callback',
          jsonpCallback: myCallback,
          contentType: 'text/html',
          success: function (data) {
            alert(data);
          }
        });

    });

小提琴:click me

但您还有其他错误,我稍后会检查它们

注意:除非您想使用特定的回调值,否则不应将回调与 jsonp 一起使用,另一方面 json 使用回调值(自动生成),如果您想回调一个函数,请将其置于完成或成功ajax的回调函数

【讨论】:

    【解决方案2】:

    jsonp 数据类型仅支持 json 格式的数据。

    在您的情况下,http://www.netflix.com 不支持 jsonp 输出类型,它会将 html 内容作为响应发回,所以我认为不可能将jsonp 与给定资源一起使用

    【讨论】:

    • 实际上我对另一个返回 json 的站点也有同样的问题。然而在那种情况下,我也无法让它工作。 Netflix 的例子就是为了说明问题。
    • @ssarangi 查看您的浏览器控制台,看看是否有错误,也可以尝试删除jsonpCallback: 'myCallback', 行和contentType
    • 你还有一个在全局范围内叫myCallback的函数
    • 是的,浏览器确实有错误提示标签无效(当我尝试使用返回 json 的 Intranet 站点时)。我已尝试删除 myCallback,但它似乎不起作用。
    • 能否分享完整的错误信息,也可以从浏览器开发者工具的网络选项卡中获取发送的请求路径,复制粘贴到新的浏览器选项卡中查看响应
    猜你喜欢
    • 2020-11-23
    • 1970-01-01
    • 2012-07-04
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    相关资源
    最近更新 更多