Какой-либо способ корректно осуществить предел тайм-аута при загрузке медленного внешнего файла с помощью JavaScript?

Я использую JavaScript для включения некоторого содержания, поданного из php файла на другом сервере. Однако этот другой сервис может иногда становиться облупленным и или требоваться много времени для загрузки или не загрузится вообще.

Существует ли путь в JS, чтобы попытаться получить внешние данные для x числа секунд прежде, чем перестать работать и отобразиться, "попробуйте еще раз" сообщение?

<script type="text/javascript" src="htp://otherserver.com/myscript.php"></script>
9
задан Brian Adkins 7 January 2010 в 05:04
поделиться

4 ответа

Пара вопросов: вы можете использовать пороги таймаута с XMLHttpRequest (также известный как ajax), но тогда, так как он находится на othererver.com, вы не можете использовать XMLHttpRequest (и поддерживать все браузеры A-класса) из-за ограничения политики Same Origin Policy restriction.

Если сценарий вводит любое глобальное имя (например, имя любой переменной, имя функции и т.д.) Вы можете попробовать setTimeout, чтобы продолжить проверку:

var TIMELIMIT = 5; // seconds until timeout
var start = new Date;

setTimeout(function() {
  // check for something introduced by your external script.
  // A variable, namespace or function name here is adequate:
  var scriptIncluded = 'otherServerVariable' in window;

  if(!scriptIncluded) {
    if ((new Date - start) / 1000 >= TIMELIMIT) {
      // timed out
      alert("Please try again")
    }
    else {
      // keep waiting...
      setTimeout(arguments.callee, 100)
    }
  }
}, 100)

Проблема, как я вижу, вы не можете отменить запрос на сценарий. Пожалуйста, кто-нибудь поправьте меня, если я ошибаюсь, но удаление