繁体   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