我有一个非常奇怪的jQuery AJAX问题,我无法弄清楚。
问题是在IE9中,有时候(我无法重现它),它不提交任何数据,尽管AJAX成功返回。同样,1 AJAX POST将不会发送任何数据,而下一个和同一页面上的任何数据将成功。
AJAX在Big Shrimp Contest游戏中运行:www.bigshrimpcontest.com/play
游戏过程中会发生一些AJAX POST:(1)开始时(记录开始时间),(2)游戏结束时(记录游戏结束时间和统计数据/得分),( 3)提交报名表(记录他们的姓名,电子邮件等)。在服务器上,我会看到请求,但没有POST或GET数据。我只看到了IE9中的问题(我们已经阻止了IE6和7)。
游戏JavaScript在这里:www.bigshrimpcontest.com/js/game.js AJAX请求是第258行(#1),第40行(第2行),第99行(#3)。
我已经尝试将缓存设置为false,但这没有任何区别。我使用的是jQuery Form,但是我删除了它,问题仍然存在。
有什么想法吗?只要他们不打破游戏,我愿意尝试。
我还担心我在其他项目中使用相同的方法来保存数据更重要。
修改
我已尝试过这两个选项:添加时间戳并将用户代理元标记更改为IE8和EmulateIE8,两者都没有运气。
还有其他想法吗?
答案 0 :(得分:1)
在我看来,这是jQuery的错。我想你应该等待修复问题的新版本 - 并且在意思是你可以将“EmulateIE8”添加到元标记中。
答案 1 :(得分:1)
您的陈述:
虽然AJAX成功返回,但它不会提交任何数据。
这对我来说听起来像缓存问题。根据jQuery缓存:
cacheBoolean默认值:true,false表示dataType“script”和“jsonp”
如果设置为false,则会强制请求的页面不被缓存 浏览器。将cache设置为false也会附加查询字符串参数, “_ = [TIMESTAMP]”,到URL。
但是,我通过FF Firebug探测网址,我没有将附加的“_ = [TIMESTAMP]”附加到您的网址。
检查此SO Question ajax-problem-in-ie9中的已接受答案,并尝试手动添加时间戳,方法是在jQuery中将缓存设置为false。
答案 2 :(得分:0)
所以,我认为我找到了一个解决方案:使用GET(vs POST)。我将所有请求更改为$.ajax('...', { type : 'GET' ... });
,从那时起就没有任何问题。我还必须缩短变量,以便IE的GET请求不会太长。这可能也是解决方案的一部分,但我不确定。