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

这种确切的情况最近让我非常中风。问题确实是 IE 缓存 AJAX 调用结果。然而,检验这一理论非常困难。您会看到,当调试控制台打开时,Microsoft 会在任何地方禁用缓存。(当我写“有帮助”时,我的意思是法律允许的绝对最大量的讽刺。)通过这样做,调试任何缓存问题成为 WTF 中的一项练习。

步骤#1:用户报告问题,因此您在 IE 中尝试并确认问题。

步骤#2:您打开调试控制台并单步调试,却发现问题已神秘消失。

步骤#3:您关闭调试器并再次尝试,却发现它再次失败。

泡沫,冲洗重复。

我的问题很复杂,因为有问题的网站是在 HTTPS 中运行的,它不应该以任何方式、形状或形式进行缓存。微软甚至同意这一点:

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

但是,请注意“出于安全原因不缓存 HTTPS 页面”声明。事实上,这是真的。然而,AJAX 响应似乎不符合“HTTPS 页面”的条件。

简而言之,在 jQuery 中禁用缓存。对于 Backbone 应用程序,将以下内容放在应用程序的 init() 函数顶部附近应该可以解决问题:

$.ajaxSetup({ 缓存: false });

于 2015-01-23T21:59:18.373 回答
2

我也有类似的问题。我已经通过删除解决了console.log

你也可以试试同样的。它看起来很傻,但它确实有效。

谢谢。

于 2013-02-07T09:23:58.810 回答
2

我们遇到了类似的问题。我们通过以下方式解决了它们

于 2013-05-16T05:39:58.903 回答