在IE9中Backbone.js集合获取请求丢失数据参数

时间:2012-09-19 10:51:08

标签: asp.net-mvc-3 backbone.js internet-explorer-9

所以,我使用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中的位置。任何人都可以帮忙吗?

1 个答案:

答案 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时