我的网页上的div的innerHTML属性是异步更新的(XMLHttpRequest)从服务器获取PHP:但它似乎不调用javascript。
<div id="mydiv"><script>alert('hello');</script></div>
这绝对没问题(更新同一div的内部HTML):
echo "<p>Hello</p>";
但是这行不通:
echo "<script>alert('hello');</script>";
我不知道为什么!我已经在多个文档中尝试了这一点,我在网上搜索似乎表明它应该工作。
只有在内容是异步的情况下才会出现这个问题。
<html>
<body>
<?php
echo "<script>alert('hello');</script>";
?>
</body>
</html>
我可以很容易地设计围绕这一点,但它是不可能执行javascript代码以这种方式?据我所知,该页建议变通,但没有明确说这是不可能的:通过echo在PHP中执行javascript,通过ajax。
谢谢!
您正在做的是将script
标记回显到html的正文中,但没有要求它们运行javascript。不管怎样,这都是错误的做法。
你应该从ajax请求的成功函数中执行你想要的任何javascript。
通常我会将JSON
对象从我的PHP
传递回success
处理程序,它将JSON.parse
它,然后用返回的数据做你想做的事情,但是你也可以使用Javascripts
eval()
,尽管,由于安全原因,这在大多数情况下是不鼓励的。
不使用eval()
;
$.ajax({
url: "path/to/php.php",
type:'POST',
data: {
data: 'someString'
},
success: function(json){
var obj = JSON.parse(json);
if(obj) {
// run some javascript
}
},
});
PHP文件(path/to/PHP . PHP);
<?php
// create return object to pass back to client javascript
$return = new stdClass();
// if you have incoming data from the ajax request to the server
$dataFromAjaxRequest = $_POST['data'];
// do somehting with this data;
if($dataFromAjaxRequest == "someString") {
$return->success = true;
} else {
$return->success = false;
}
// clean the buffer
ob_clean();
// encode your return obj to JSON and echo it and die
die(json_encode($return));
?>
使用eval
执行纯php生成的Javascript;Javascript;
$.ajax({
url: "path/to/php.php",
type:'POST',
data: {
data: 'someString'
},
success: function(javascript){
eval(javascript);
},
});
PHP文件(path/to/PHP . PHP);
<?php
// if you have incoming data from the ajax request to the server
$dataFromAjaxRequest = $_POST['data'];
// do somehting with this data;
if($dataFromAjaxRequest == "someString") {
$return = "alert('success!');";
} else {
$return = "alert('failure!');";
}
// clean the buffer
ob_clean();
// encode your return obj to JSON and echo it and die
die($return);
?>
希望这能奏效
<html>
<body>
<script>eval(<?php echo 'alert('hello')';?>);
</script>
</body>
</html>
为了更好的跨浏览器兼容性和减少冗长,我建议使用jQuery。
$.get('http://example.com', function(responseText) {
alert(responseText);
});