我正在使用.NET框架开发,使用jQuery 1.4.2客户端。
在Firefox 3.6版本中进行开发时,我经常在页面上进行的许多ajax调用之一将触发两次,第二次将成功返回,但不会触发ajax调用的成功处理程序,并且第一次永远不会返回任何东西。所以基本上数据都被发送到服务器并且响应被发送,但响应没有任何反应。
以下是我正在进行的通话的示例。它发生在任何ajax调用中,因此没有一个特定因素导致问题:
$.ajax({
type:"POST",
contentType : "application/json; charset=utf-8",
data:"{}",
dataType:"json",
success:function(){
alert('success');
},
error:function(){
alert('error');
},
url:'/services.aspx/somemethod'
});
})
从firebug,这里是第一个调用的标题,在firebug中显示为永远不会完全响应,这意味着我看不到响应代码,并且firebug中的加载器gif永远不会消失。
注意:在firebug中,它通常会显示Response Header,但是对于第一次调用,此空间为空白
Server ASP.NET Development Server/9.0.0.0
X-AspNet-Version 2.0.50727
Content-Type application/json; charset=utf-8
Connection Close
请求标题
Host mydomain.com
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3)
Gecko/20100401Firefox/3.6.3 ( .NET CLR 3.5.30729)
Accept application/json, text/javascript, */*
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Content-Type application/json; charset=utf-8
X-Requested-With XMLHttpRequest
Referer http://mydomain.com/mypage.aspx
这是第二个请求的标题,它似乎在firebug中完成(即响应为200):
响应标题
Server ASP.NET Development Server/9.0.0.0
X-AspNet-Version 2.0.50727
Content-Type application/json; charset=utf-8
Connection Close
请求标题
Host mydomain.com
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3)
Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Content-Type application/json; charset=utf-8
Referer http://mydomain.com/mypage.aspx
总结一下我的问题,为什么要发出两个请求,为什么它们都不会在ajax调用中触发成功或错误处理程序。
我看过这篇关于firefox 3.5+和预检请求的文章
https://developer.mozilla.org/En/HTTP_access_control#Preflighted_requests
在文章中说是否使用任何其他内容类型制作“POST” “申请/ x-www-form-urlencoded,multipart / form-data或text / plain”比请求预先通过。如果是这种情况,我的所有电话都会发生这种情况。
谢谢
答案 0 :(得分:0)
这不是建议的临时解决方案的答案。使呼叫与async:false
同步并查看是否有效。
我最近一直在用一个听起来类似的臭虫撕掉我的头发。