Ajax получает запрос не работает в сафари с HTTPS - PullRequest
0 голосов
/ 21 января 2019

Я хочу динамически загружать некоторые файлы шаблонов с помощью ajax. Я добавил метод ajax $.get для загрузки html-файлов, и он отлично работает во всех браузерах, кроме браузера safari.

В сафари это дает мне «Не удалось загрузить ресурс: отменено» Ошибка при первом открытии URL-адреса. Однако после того, как я снова обновляю свою страницу, она загружает все файлы.

Когда я открываю свой URL с запросом http вместо https, он может загрузить файл шаблона в первый раз в браузере Safari.

Эта проблема возникает только тогда, когда я открываю URL с https . Я успешно установил сертификат, и он отлично работает с другим браузером. Даже в сафари нет проблем с сертификатами.

Вот мой код

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);
    });
  }
}

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Вероятно, это проблема с кешем / тайм-аутом. Попробуйте установить время ожидания Ajax на что-то огромное. Если это сработает, откажитесь, пока не найдете сладкое место.

0 голосов
/ 04 февраля 2019

Пока ваш подход «должен» работать, он входит в странные неизвестные области JS, особенно используя async lib.Итак, мое решение в основном включает рефакторинг всего этого.Вместо async вы можете использовать обещания 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" );
    });
});

Примечание: $. Получите просто код сахара для $ .ajax.По умолчанию $ .ajax выполняет get, если не указан другой метод.

Браузер, какой бы он ни был, будет обрабатывать вызовы и запускать каждый из них в кратчайшие сроки, в зависимости от возможностей каждого браузера.и ограничения, поэтому не нужно беспокоиться о конкретных реализациях.

Как правило, всегда не забывайте проверять кодировку вызовов и ответов и их форматы, json, текст или все, что вы используете в качестве формата ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...