我正在尝试使用BB.js构建一个小应用程序。
当然,一切都在FF,CHROME& Opera而不是IE。
我只是尝试使用Restful(php后端)获取模型来获取模型集合。
在IE中,即使多次刷新后也没有任何事情发生。但是,当我打开de dev工具来检查控制台并进行刷新时,突然它会起作用。
模特&集合
(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”: “你好”},{ “ID”: “47”, “factContent”: “世界”}]
答案 0 :(得分:4)
我相信这是由IE缓存ajax调用引起的。请查看此问题:backbone.js fetch results cached。基本上,您可以强制IE不缓存您的请求,如下所示:
factsc.fetch({
cache: false,
success:function(){ /* stuff */
},
error:function() {/* error message */
});
答案 1 :(得分:2)
我也有类似的问题。我已经通过删除console.log
您也可以尝试相同。它看起来很傻但它确实有用。
感谢。
答案 2 :(得分:2)
我们遇到了类似的问题。我们通过
解决了这些问题在Ajax级别禁用缓存。
$。ajaxSetup({ cache:false, });
我们使用HTML5Boilerplate控制台覆盖插件代码,而不是删除生产代码中的console.log https://raw.github.com/h5bp/html5-boilerplate/master/js/plugins.js
答案 3 :(得分:1)
这种确切的情况最近使我绝对贬低。问题确实是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({ cache:false });