所以,我使用Backbone.js编写了一个消息传递系统。它在Chrome和FF中运行良好,但是IE9在特定的获取调用中遇到了问题。 (我在MVC3工作)。
我有一个民意调查,检查是否有新邮件进入服务器。使用此方法调用轮询:
DoMessageFetch = function() {
var now = new Date().toUTCString();
Chat.mymessages.fetch({
cache: false,
data: {
Now: now
},
success: function (response) {
// if there are messages ...
// for each message, open a chat window
if (Chat.mymessages.length > 0) {
for (var i = 0; i < Chat.mymessages.length; i++) {
var useridto = Chat.mymessages.at(i).get("UserId");
var name = Chat.mymessages.at(i).get("ScreenName");
// a chat-window with this useridto is NOT on the page
if (!($('#chat-window-' + useridto).is(':visible'))) {
Chat.doChatMessageFetch(name, useridto, null); // this constructs a Backbone view
}
}
}
},
error: function () { console.log('ERROR: fetching general poll messages failed.'); }
});
Chat.mymessages.reset();
}
在IE9中,当我在Controller中观察断点时,Now param为null。这意味着请求遵循服务器上错误的代码路径...
我不明白我的Now参数在IE中的位置。任何人都可以帮忙吗?
答案 0 :(得分:1)
此问题是由于
的不同行为造成的new Date().toUTCString()
IE,谷歌浏览器和Firefox之间的。
例如Chrome中的结果是:
"Thu, 20 Sep 2012 20:19:15 GMT"
在IE中你会得到
"Thu, 20 Sep 2012 20:19:15 UTC"
MVC3 ModelBinder将忽略IE格式并将Now参数保留为null。此问题的解决方案是替换
new Date().toUTCString()
带
new Date().toJSON()
此解决方案唯一需要注意的是,由于缺少toJSON()函数,它在IE7上默认不起作用,但是这个问题可以使用Douglas Crockford json2.js库来解决使用Backbone.js时