阿贾克斯get请求在Safari不工作与HTTPS

问题描述 投票:5回答:2

我想与AJAX的帮助下动态加载一些模板文件。我已经添加了加载HTML文件,它的正常工作与除Safari浏览器所有的浏览器的AJAX $.get方法。

在Safari它给了我“无法加载资源:取消”错误,当我第一次打开URL。不过,我再次刷新我的网页后,它加载的所有文件。

当我打开我的网址为http请求而不是HTTPS,它可以在第一时间对Safari浏览器加载模板文件。

这个问题只有当我打开以https的URL发生。我已成功安装了证书,并与其他浏览器的正常工作。即使没有在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);
    });
  }
}

任何想法?

javascript jquery ajax https
2个回答
1
投票

虽然你的做法“应该”的工作,它进入JS的怪异未知的领域,特别是使用异步库。所以,我的解决方案主要涉及重构它的全部。相反,异步,你可以使用jQuery承诺解雇所有让你需要的,然后与承诺处理他们中的每一个处理答复/错误。

举个例子:

$(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。

浏览器,无论它是,将处理来电,并会尽快触发他们中的每一个所允许的基础上,每个浏览器的功能和局限性,所以没有必要担心具体的实现。

作为一般规则,永远记住要检查任何你作为响应格式使用调用和响应及其格式,JSON,文本或编码。


-1
投票

这可能是一个缓存/超时问题。尝试AJAX超时设置的东西巨大。如果这样的作品,支持它关闭,直到找到最佳平衡点。

© www.soinside.com 2019 - 2024. All rights reserved.