4

我正在对外部服务器进行 $.ajax 调用。该服务器返回一个重定向,重定向页面返回一些 json。这在 FF 和 Chrome 上运行良好,但 Safari 和 Opera 不喜欢它。

这是我的 $.ajax 代码:

$.ajax(
{
    url:url,
    dataType:"json",
    success:function(data)
    {
        console.log("success");
    },
    complete:function()
    {
        console.log("complete");
    }
});

在 Firefox 和 chrome 中,这可以正常工作 - 我的每个 ajax 响应都调用了“成功”。然而,在 safari 和歌剧中,从不叫“成功”,只叫“完成”。网络请求控制台为我提供了以下信息:

resolve.json    GET 302 application/json
1817995.json    GET (canceled)  undefined

其中 1717995.json 是从 resolve.json 发送的重定向。我不确定为什么取消请求(如响应所示)。

任何人都可以在这方面提供一些帮助吗?

4

1 回答 1

1

恕我直言,这是一个跨域(起源)问题。默认情况下,您的浏览器不执行跨浏览器 ajax 请求。您应该尝试使用 jsonp 而不是 json:

dataType:"jsonp"

但这只有在服务器支持 jsonp 时才有效(在这种情况下,您还需要指定回调函数的名称)。

如果不支持 jsonp,您可以从您的服务器创建代理。基本上它甚至不需要。而不是重定向只是从第 3 方服务器“下载”文件并将其作为响应输出。

如果可以,这只适用于较新的浏览器,那么你可以试试这个(这是更好的解决方案,然后是服务器端“代理”恕我直言)

于 2012-06-07T14:14:40.443 回答