2

BB.js を使用して小さなアプリを構築しようとしています。

もちろん、FF、CHROME、Opera ではすべて動作しますが、IE では動作しません。

モデルのコレクションを取得するために、Restful (php バックエンド) を使用してモデルを取得しようとしています。

IE では、複数回更新しても何も起こりません。しかし、開発ツールを開いてコンソールを確認し、更新すると、突然機能します。

モデル&コレクション

(function($) {


//a fact model
window.Fact = Backbone.Model.extend({

    defaults: {
        factContent: ''
    },


    initialize: function Fact(){
        console.log("just created a fact");

        this.url = "fact.php?fact="+this.id,

        this.bind("error", function(model, error){
            console.log(error);
        });
    },

    parse : function(resp, xhr) {

        //new fact added
        if(resp.type == "create")
            this.url = "fact.php?fact="+resp.id;

        return resp;
    }

});

//collection of models
window.Facts = Backbone.Collection.extend({

    model: Fact,

    url: "facts.php",

    initialize: function(){
        console.log('fact collection created');
    }
});


//facts view
window.FactsCollectionView = Backbone.View.extend({

    el: $("#factsCollectionContainer"),

    initialize: function(){
        this.template = _.template($('#factsCollectionTemplate').html());

        //binding
        _.bindAll(this, 'render');
        this.collection.bind('change', this.render);
        this.collection.bind('add', this.render);
        this.collection.bind('remove', this.render);
        this.collection.bind('reset', this.render); 

    },

    render: function(){
        var renderedContent = this.template({facts : this.collection.toJSON()});
        $(this.el).html(renderedContent);
        return this;
    }

});


$(document).ready(function(){
    //create a fact collection and populate it
    factsc = new Facts();


                //NOT WORKING IN IE (no alerts)
                //WORKING ONLY USING DEV TOOL
    factsc.fetch({success:function(){
        //create a view and show collection after fetch is done
        factsView = new FactsCollectionView({collection:factsc});
        factsView.render(); 

        alert("success fetch");
    }, error: function(){
        alert("error fetch");
    }});    
});





})(jQuery);

取得すると次の JSON が返されます: [{"id":"48","factContent":"Hello"},{"id":"47","factContent":"World"}]

4

4 に答える 4

4

これは、IE が ajax 呼び出しをキャッシュしていることが原因だと思います。この質問を確認してください: backbone.js fetch results cached . 基本的に、次のように IE にリクエストをキャッシュさせないようにすることができます。

factsc.fetch({
cache: false,
success:function(){ /* stuff */
},
error:function() {/* error message */
});
于 2012-09-18T15:39:03.230 に答える
2

私も同様の問題を抱えていました。削除することで解決しましたconsole.log

同じように試すこともできます。ばかげているように見えますが、機能します。

ありがとう。

于 2013-02-07T09:23:58.810 に答える
2

同様の問題に直面しました。私たちはそれらを解決しました

于 2013-05-16T05:39:58.903 に答える
2

この正確な状況は、最近私を完全に無気力にさせました。問題は、IE が AJAX 呼び出しの結果をキャッシュしていることです。ただし、その理論をテストすることは非常に困難です。ご覧のとおり、Microsoft は、デバッグ コンソールが開いているときにキャッシュをすべて無効にしています。(私が「役に立つ」と書いているときは、法律で許可されている絶対最大量の皮肉を意味しています。) そうすることで、キャッシングの問題をデバッグすることが WTF での課題になります。

ステップ #1: ユーザーから問題が報告されたので、IE で試して問題を確認します。

ステップ #2: デバッグ コンソールを開き、問題が不思議なことに消えていることを確認するためだけにステップ実行します。

ステップ #3: デバッガーを閉じてもう一度試してみると、再び失敗することがわかりました。

泡立て、すすぎの繰り返し。

私の問題は、問題のサイトが HTTPS で実行されているという事実によって複雑になりました。HTTPS は、いかなる方法、形状、または形式でもキャッシュされるべきではありません。Microsoft もこれに同意します。

https://msdn.microsoft.com/library/ie/dn265017%28v=vs.85%29.aspx

ただし、「HTTPS ページはセキュリティ上の理由からキャッシュされません」という文に注意してください。実際、これは真実です。ただし、AJAX 応答は「HTTPS ページ」とは見なされないようです。

つまり、jQuery でキャッシュを無効にします。バックボーン アプリの場合、アプリの init() 関数の先頭近くに次の行を配置すると、うまくいくはずです。

$.ajaxSetup({ キャッシュ: false });

于 2015-01-23T21:59:18.373 に答える