簡體   English   中英

使用HTTPS,Ajax獲取請求無法在safari中工作

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM