[英]Ajax get request not working in safari with HTTPS
我想在ajax的帮助下动态加载一些模板文件。 我已经添加了ajax $.get
方法来加载html文件,并且除了safari浏览器之外,所有浏览器都能正常工作。
在safari中,当我第一次打开url时,它给出了“无法加载资源:已取消”错误。 但是,在我再次刷新页面后,它会加载所有文件。
当我使用http请求而不是https打开我的URL时,它可以在safari浏览器上第一次加载模板文件。
只有在我使用https打开网址时才会出现此问题。 我已成功安装证书,并与其他浏览器一起正常工作。 即使在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的奇怪未知领域,特别是使用异步lib。 所以,我的解决方案基本上涉及重构所有这些。 相反,您可以使用jQuery promises来触发所需的所有获取,然后使用promises处理程序处理每个中的响应/错误。
举个例子:
$(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" );
});
});
注意:$。得到它只是$ .ajax的糖代码。 默认情况下,$ .ajax执行get,除非指定了另一个方法。
浏览器(无论哪个)将处理这些调用,它将根据每个浏览器的功能和限制,在允许的情况下尽快触发每个调用,因此无需担心具体的实现。
作为一般规则,请始终记住检查调用和响应的编码及其格式,json,文本或您用作响应格式的任何内容。
这可能是缓存/超时问题。 尝试将ajax超时设置为巨大的值。 如果有效,请将其关闭,直至找到最佳位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.