0

そこで、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では、コントローラーでブレークポイントを監視すると、Nowパラメーターがnullになります。これは、リクエストがサーバー上の間違ったコードパスをたどることを意味します...

私のNowパラメーターがIEのどこにあるのかわかりません。誰か助けてもらえますか?

4

1 に答える 1

1

この問題は、

new Date().toUTCString()

IE、Google Chrome、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ではデフォルトで機能しないことですが、この問題は、Backbone.jsを使用するときにも推奨されるDouglasCrockfordjson2.jsライブラリを使用して解決できます。

于 2012-09-20T20:36:32.233 に答える