1

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

出于某种原因,我认为 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);
    }
});
4

3 回答 3

3

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

于 2010-05-21T18:02:06.820 回答
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 的 getJSON()

那么您的回复必须采用如下格式:

dosomething({
    test: 'foo'
});

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

于 2010-05-21T18:49:01.807 回答
1

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

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

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

于 2010-05-21T18:20:05.730 回答