跨域Ajax调用在Safari 4和Safari 5中不起作用

时间:2014-02-26 17:32:15

标签: javascript jquery safari cors

我有以下jquery ajax代码,它在所有其他浏览器中工作,除了Mac中的Safari 4和Safari 5。它在Safari 6中正常工作。

$.ajax({
        type : "POST",
        url : crossDomainURL,
        contentType : "text/plain",
        data : requestData,
        dataType : "text",
        success : function(e) {
            console.log("success");

        },
        error : function(e) {
            console.dir(e);
            console.log("FAILLLLLLLLL");
        },
    });

每次都会在控制台上打印“FAILLLLLLL”语句,其中statusText为error,状态为0. crossDomainURL 的服务器已正确配置为处理此类请求(因此可正常工作)在所有其他浏览器中)。

但是对于Mac上的Safari(4和5),ajax调用甚至不会离开浏览器。这似乎与CORS问题有关,但我很困惑为什么这个相同的代码在Firefox和Chrome和Safari 6中正常工作但在Safari 4& 5。

我很感激任何想法。

感谢。

编辑:可以在此处找到旧版本的Safari:http://michelf.ca/projects/multi-safari/

3 个答案:

答案 0 :(得分:1)

我将一个示例nodejs应用程序与CORS标头集放在一起,并成功地在Safari 4(Mac)上完成了跨域请求。

Access-Control-Allow-Origin *
Access-Control-Allow-Methods GET,PUT,POST,DELETE
Access-Control-Allow-Headers Content-Type

可在此处找到服务器代码:https://github.com/sfarthin/cross-domain-ajax-nodejs/blob/master/server.js 并部署到Heroku(polar-dawn-3847.herokuapp.com)。

示例跨域请求可在此处找到: http://jsfiddle.net/78SYj/2/ (jsFiddle的界面在Safari 4中被破坏,但仍然执行ajax请求)

$.ajax({
    type : "POST",
    url : "http://polar-dawn-3847.herokuapp.com/",
    contentType : "text/plain",
    dataType : "text",
    success : function(e) {
        alert("success");

    },
    error : function(e) {
        alert("FAILLLLLLLLL");
    }
});

如果您共享服务器代码/配置,我认为我们可以追踪问题。

答案 1 :(得分:0)

我已经阅读过Safari的前6版本中的错误,这些错误会导致Windows身份验证出现问题。要尝试的一件事是更改您网站的身份验证设置。从提供商处删除谈判,并离开NTLM。

更多信息:http://msdn.microsoft.com/en-us/library/cc339532%28v=vs.90%29.aspx

答案 2 :(得分:0)

由于它正在处理所有其他浏览器,但Safari 4和5给你带来了痛苦,我怀疑这是一些与这两种浏览器不相符的配置问题。

所有主流浏览器都支持CORS,包括您提到的那两个。请检查here

由于内容类型与正常情况不同,您可能希望包含

  

Access-Control-Allow-Headers

如果缺少响应头,请

请检查fiddler中的请求以查看传递的内容以及为什么失败?如果它首先发送OPTION请求以从服务器获取是否允许发出跨域请求的权限,则可能需要提供带头的响应

Access-control-allow-origin  
Access-Control-Allow-Headers

甚至在你的主要请求被执行之前。