【问题标题】:Ajax get request not working in safari with HTTPSAjax 获取请求在 HTTPS 的 safari 中不起作用
【发布时间】:2019-06-14 13:00:50
【问题描述】:

我想在 ajax 的帮助下动态加载一些模板文件。我已经添加了用于加载 html 文件的 ajax $.get 方法,它可以在除 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);
    });
  }
}

有什么想法吗?

【问题讨论】:

  • 检测到第一次发送失败可以尝试重新发送请求
  • @KamilKiełczewski 我试图重新发送请求,但它不起作用。它只有在我刷新页面时才起作用。
  • 你是从 https 源调用 https url 吗?
  • @sparshturkane,是的,我正在从 https 源调用 https url
  • 请使用您当前的操作系统、Safari 版本和来自控制台的请求/响应标头更新您的帖子。

标签: javascript jquery ajax https


【解决方案1】:

虽然您的方法“应该”有效,但它进入了 JS 的奇怪未知领域,特别是使用异步库。因此,我的解决方案基本上涉及重构所有内容。相反,你可以使用 jQuery Promise 来触发你需要的所有获取,然后使用 Promise 处理程序处理每个请求中的响应/错误。

举个例子:

$(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 只是 $.ajax 的糖代码。默认情况下,$.ajax 会执行 get,除非指定了其他方法。

无论是哪种浏览器,都会处理调用,并会根据每个浏览器的功能和限制,在允许的情况下尽快触发每个调用,因此无需担心具体的实现。

作为一般规则,请务必检查调用和响应的编码及其格式、json、文本或您用作响应格式的任何内容。

【讨论】:

    【解决方案2】:

    这可能是缓存/超时问题。尝试将 ajax 超时设置为很大的值。如果这行得通,请退出,直到找到最佳位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多