Часть основного php-файла:
<script>
let current_effect;
function getRandomEffect() {
let effect;
do {
effect = Math.floor(Math.random() * 3);
} while (effect === current_effect);
return effect;
}
function updateEffectContainer(effect) {
// Construct the filename of the PHP file for the specified effect
const filename = 'effect' + effect + '.php';
// Load the HTML content from the PHP file using AJAX
fetch(filename)
.then(response => response.text())
.then(html => {
// Update the effect container with the HTML content
document.getElementById("effect-container").innerHTML = html;
})
.catch(error => {
console.error('Error:', error);
});
}
document.getElementById("changeEffectButton").addEventListener("click", function () {
current_effect = getRandomEffect();
updateEffectContainer(current_effect);
});
current_effect = getRandomEffect();
updateEffectContainer(current_effect);
</script>
эффект0.php:
<p>test</p>
<script type = "text/javascript">
alert(test-alert);
</script>
Основной файл PHP выбирает эффект [0||1||2] при загрузке сайта и при нажатии кнопки «changeEffectButton». Я вижу, что отображается «тест» (в случае, если выбран effect0.php), но окно предупреждения не появляется.
Любая идея, почему и как это исправить?
Спасибо за каждый вклад! ^^



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете попробовать что-то вроде этого для печати с PHP с помощью js
<script>
var xhr = new XMLHttpRequest();
var url = "example.php";
var method = "GET";
xhr.open(method, url, true);
xhr.responseType = "text";
xhr.onload = function () {
if (xhr.readyState === xhr.DONE) {
if (xhr.status === 200) {
var outputDiv = document.getElementById("effect-container");
outputDiv.innerHTML = xhr.response;
// Evaluate the script
eval(outputDiv.getElementsByTagName('script')[0].innerHTML);
} else {
console.info("Error: " + xhr.status);
}
}
};
xhr.send();
</script>
в example.php вы можете иметь,
echo '<p>this is printable script</p>';
В вашем случае это код,
function updateEffectContainer(effect) {
var xhr = new XMLHttpRequest();
const url = 'effect' + effect + '.php';
var method = "GET";
xhr.open(method, url, true);
xhr.responseType = "text";
xhr.onload = function () {
if (xhr.readyState === xhr.DONE) {
if (xhr.status === 200) {
var outputDiv = document.getElementById("effect-container");
outputDiv.innerHTML = xhr.response;
// Evaluate the script
eval(outputDiv.getElementsByTagName('script')[0].innerHTML);
} else {
console.info("Error: " + xhr.status);
}
}
};
xhr.send();
}
И PHP есть,
echo '<p>test</p>
<script type = "text/javascript">
alert("test-alert");
</script>';
вы используете PHP-сервер, такой как wamp или xammp?
да, я использую xampp, это актуально?! Я использую расширение в vsc: Live Server (Five Server)
@Bambi Думаю, ваше предупреждающее сообщение должно быть в кавычках - alert("test-alert");
да, я уже заметил эту ошибку ^^, все еще, к сожалению, не работает
@Bambi Сделал некоторые изменения и сейчас проверю.
Спасибо за ваше решение, но оно все еще не выполняется. :-( Содержимое p-тега распечатывается, но предупреждения не видно