我想与AJAX的帮助下动态加载一些模板文件。我已经添加了加载HTML文件,它的正常工作与除Safari浏览器所有的浏览器的AJAX $.get
方法。
在Safari它给了我“无法加载资源:取消”错误,当我第一次打开URL。不过,我再次刷新我的网页后,它加载的所有文件。
当我打开我的网址为http请求而不是HTTPS,它可以在第一时间对Safari浏览器加载模板文件。
这个问题只有当我打开以https的URL发生。我已成功安装了证书,并与其他浏览器的正常工作。即使没有在Safari没有证书的问题为好。
这里是我的代码
var decorator = {
init: function(book, cd) {
this.loadTPL(cd);
},
tpl: {
btnStart: "tpl/startBtn.html",
interfaceTpl: "tpl/interfaceTpl.html",
topMenu: "tpl/topMenu.html",
topMenuItem: "tpl/topMenuItem.html",
},
loadTPL: function(cbTpl) {
var self = this;
var objTpl = {};
async.forEachOf(this.tpl, function(value, key, callback) {
$.get(value, {}, function(data) {
//alert("Load was performed.");
//console.log(value, data);
objTpl[key] = data;
callback();
});
}, function(err, results) {
if (err) {
console.log(err);
}
self.tpl = objTpl;
cbTpl(err);
});
}
}
任何想法?
虽然你的做法“应该”的工作,它进入JS的怪异未知的领域,特别是使用异步库。所以,我的解决方案主要涉及重构它的全部。相反,异步,你可以使用jQuery承诺解雇所有让你需要的,然后与承诺处理他们中的每一个处理答复/错误。
举个例子:
$(templatesToLoad).each(function (element, index) {
$.ajax({element.url, cache: false })
.done(function (result) {
objTpl[key] = result;
element.allback(); // callback for each template
})
.fail(function () {
alert( "error" );
})
.always(function () {
alert( "completed" );
});
});
注:$得到它只是一个糖代码$阿贾克斯。默认情况下,$除非另一种方法是阿贾克斯执行GET。
浏览器,无论它是,将处理来电,并会尽快触发他们中的每一个所允许的基础上,每个浏览器的功能和局限性,所以没有必要担心具体的实现。
作为一般规则,永远记住要检查任何你作为响应格式使用调用和响应及其格式,JSON,文本或编码。
这可能是一个缓存/超时问题。尝试AJAX超时设置的东西巨大。如果这样的作品,支持它关闭,直到找到最佳平衡点。