我有以下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/
答案 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
由于内容类型与正常情况不同,您可能希望包含
如果缺少响应头,请
。
请检查fiddler中的请求以查看传递的内容以及为什么失败?如果它首先发送OPTION请求以从服务器获取是否允许发出跨域请求的权限,则可能需要提供带头的响应
Access-control-allow-origin
Access-Control-Allow-Headers
甚至在你的主要请求被执行之前。