【问题标题】:jQuery JSONP, only works with same site URLsjQuery JSONP,仅适用于相同的站点 URL
【发布时间】:2010-05-21 17:58:38
【问题描述】:

我需要向返回 json 格式数据的 API 发出请求。此 API 位于此脚本将运行的域的子域上(尽管目前它位于与 dev 完全不同的域上,本地主机)

出于某种原因,我认为 jsonp 应该启用此行为,我错过了什么?

使用 jQuery 1.4.2

$.ajax({
    url:'http://another.example.com/returnsJSON.php',
    data: data,
    dataType:'jsonp',
    type: "POST",
    error: function(r,error) {
        console.log(r);
        console.log(error);
    },
    success:function(r){
    console.log(r);
    }
});

【问题讨论】:

  • ed209,您能否解释一下您接受的答案(将“POST”更改为“GET”)如何为您解决了这个问题?只是想知道,因为我认为这不会完成你需要完成的事情......
  • 我还负责在 'another.example.com/returnsJSON.php' 处输出的 jsonp,并且我确实在返回的 php.ini 中包含了回调方法。更改为 GET 只是解决方案的一部分,由于某种原因,在“returnsJSON.php”脚本上使用 POST 时我没有得到回调方法。所以实际上你最初的段落答案总结了它。

标签: javascript jquery jsonp http-post


【解决方案1】:

将您的类型从“POST”更改为“GET”。 也就是说,仅当您打算检索数据时。

【讨论】:

    【解决方案2】:

    您需要结合 Arnaud 的答案(不要使用 POST)和 R. Bemrose 的答案(确保服务器端返回 JSONP),并添加回调函数规范。

    换句话说,这是您修改后的请求代码:

    function dosomething(data) {
        console.log(data);
    }
    
    $.ajax({
        url: 'http://another.example.com/returnsJSON.php',
        data: data,
        dataType: 'jsonp'
    });
    

    需要注意的是,在生成的代码中,您会看到当 dataType 为“jsonp”时,jQuery 会输出一个指向 url 的脚本标签;它不是典型的 XHR。你也可以在这里使用jQuery's getJSON()

    那么你的回复必须是这样的格式:

    dosomething({
        test: 'foo'
    });
    

    调用完成后,您指定的回调将触发。

    【讨论】:

      【解决方案3】:

      您是否修改了服务器端组件以使用 JSONP?

      您不能只是告诉客户端使用 JSONP,然后突然期望服务器端的 JSON 脚本返回正确的结果。

      具体来说,JSONP 要求服务器返回一个 JavaScript 字符串,该字符串调用特定函数(其名称与其他参数一起传入)以及返回结果,然后客户端 evals。

      【讨论】:

        猜你喜欢
        • 2019-12-06
        • 1970-01-01
        • 1970-01-01
        • 2016-06-17
        • 1970-01-01
        • 2013-06-24
        • 2017-06-10
        • 2011-04-12
        • 2017-11-20
        相关资源
        最近更新 更多