@romasimf
php программист

Как исполнить javascript внутри php файла, который загружает AJAX?

Есть файл index.php к которому подключен AJAX без JQUERY. AJAX загружает файл race-data.php каждые 50мс, внутри race-data.php есть javascript код и php код. Но javascript код - не работает. Возможно ли загрузить таким образом javascript код из файла race-data.php?

P.S Если не знаете как сделать без JQUERY, напишите с JQUERY.

index.php


<script type="text/javascript">
function race() {
var obj = document.getElementById('race');
var req;

if (window.XMLHttpRequest)  req = new XMLHttpRequest();
else if(window.ActiveXObject) {
    try {
        req = new ActiveXObject('Msxml2.XMLHTTP');
    } catch (e){}
    try {
        req = new ActiveXObject('Microsoft.XMLHTTP');
    } catch (e){}
}

if (req) {
    req.onreadystatechange = function() {
      if (req.readyState == 4 && req.status == 200)
    { obj.innerHTML = req.responseText; }
    };
    req.open("POST", 'race-data.php', false);
    req.send(null);

}

else alert("Браузер не поддерживает AJAX");
}

setInterval(race, 50);
</script>
<table class='race-background' id="race" align='left'>
</table>


race-data.php

<script>
document.write('HELLO');
</script>

<?php
// МНОГО PHP КОДА
?>
  • Вопрос задан
  • 1271 просмотр
Решения вопроса 1
@romasimf Автор вопроса
php программист
Отвечаю сам на свой вопрос - можно. Но поскольку я не обладаю никакой квалификацией в javascript, мое решение - не очень качественное.

Что нужно:

1 - писать в php файле код javascript без тегов <script></script>
2 - не назначать setRequestHeader
3 - запрос не асинхронный (false)
4 - вызвать php файл, который содержит javascript и php через eval

Неприятные камни:
1 php функция echo и ей подобные, работает только внутри javascript кода document.write('<?php echo "text"; ?> ');
2 стили нужно прописать так же, в
document.write('<?php echo "<style></style>"; ?>');

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

Если камни мешают, можно просто создать 2ую AJAX функцию и в ней будет работать и PHP и JAVASCRIPT, как отдельный сценарий.

Мой код:

добавил в index.php

<script type="text/javascript">

function sound() {

var xhr = new (window.XMLHttpRequest || ActiveXObject)("Msxml2.XMLHTTP");
xhr.open("POST", "sound.php", false);
xhr.send(null);
eval(xhr.responseText); 

}
setInterval(sound, 100);
</script>


sound.php (просто для примера)
<?php
$time = microtime(true);
?>
document.write('<?php echo "$time"; ?>');
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
profesor08
@profesor08 Куратор тега JavaScript
Любыми способами получаешь js код как строку и передаешь ее в функцию eval
Ответ написан
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
Как исполнить javascript внутри php файла, который загружает AJAX?

Никак. JS исполняет браузер. Вот когда откроете файл браузером по ссылке, тогда JS и исполнится. Вообще если у вас такая задача возникла, то что-то пошло не так.
Ответ написан
Robur
@Robur
Знаю больше чем это необходимо
вы запихиваете результат в table, там скорее всего script браузером выкидывается как невалидный.
вставляйте в обычный div, а table возвращайте с сервере вместе со всем остальным.

В целом конечно все что вы делаете это натягивание ужа на кактус, но кто ж вам запретит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы