[英]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.