#javascript #blocking #document.write
#javascript #блокировка #document.write
Вопрос:
Кто-нибудь знает, как я могу создать document.write с блокировкой выполнения тега script?
<script type="text/javascript">
var test = "bad";
document.write('<script type="text/javascript" src="js.php"></script>');
console.log(test);
</script>
Где js.php является
<?PHP sleep(1); echo "var test='good';"; ?>
консоль.журнал должен выводить «good», но он выводит «bad». Конечно, через секунду значение параметра меняется на «good», но мне определенно нужно, чтобы оно блокировалось. Спасибо!!
Я вроде как понимаю, что происходит. Похоже, что любой document.write в текущем блоке скрипта фактически записывается сразу после текущего блока скрипта.
Ответ №1:
Кажется, я припоминаю, что существует обходной путь для написания <script>
тегов:
document.write('<scr' 'ipt type="text/javascript" src="js.php"></scr' 'ipt>');
Комментарии:
1. К сожалению, это все еще не работает. Я использую chrome и Firefox. В любом случае, спасибо!
Ответ №2:
Выполните вызов Ajax, чтобы загрузить больше данных. Маловероятно, что это можно настроить. Вы можете легко сделать это с помощью jQuery и JSON.
Комментарии:
1. Вы можете определить обратный вызов для запуска вашего скрипта только после завершения вызова ajax. Вы также можете добавить некоторую анимацию «Загрузки» для вашего веб-сайта во время выполнения ajax-вызова и удалить ее при обратном вызове.
2. @nolanpro XHR также может быть блокирующим, используя (a) синхронный флаг объекта XMLHttpRequest. Это третий параметр
open
метода. Кстати, это одна из причин, по которой ‘AJAX’ — неподходящий термин для XHR.3. Спасибо, я думаю, это сработает! К сожалению, я не могу использовать jQuery из-за специфической реализации, но XHR, как сказал Kooilnc, может быть галочкой.