I’ve a php page which returns a full-fledge js snippet when we query that page. Let say that page is get_js.php and looks something like this:
JavaScript
x
<?php
echo '<script>alert("hey");</script>';
?>
The ask here is that the value returned by that get_js.php should be executed on client side when we do an ajax call. The echo string above is just an example and can be any other js snippet like <script>document.getElementById("this_div_id_exists").style.display = "none";</script>
.
The client side implementation is something like this:
JavaScript
$.ajax({
url: 'get_js.php',
type: 'POST',
success: function(data) {
document.getElementById("this_div_id_exists").innerHTML = data;
}
});
If I check the Elements tab from DevTools, the data is appended inside the proper div.
PS: there’s no issue with retrieving the data as console.log works fine. And also guys this project is far from refactoring process, hence settling down the workaround.
Advertisement
Answer
Use eval()
JavaScript
$.ajax({
url: 'get_js.php',
type: 'POST',
success: function(data) {
document.getElementById("this_div_id_exists").innerHTML = data;
// now loop through any script tags and eval() them
document.querySelectorAll("#this_div_id_exists script").forEach(tag => eval(tag.innerHTML));
}
});