php文件中的JavaScript不会';使用Ajax调用php文件时不起作用
使用Ajax,我调用了一个包含javascript的php文件,但是这样,javascript就不起作用了 这里给出了main.html文件。它只是使用Ajax调用一个名为test1.php的php文件来更新客户端的所有页面php文件中的JavaScript不会';使用Ajax调用php文件时不起作用,javascript,php,ajax,Javascript,Php,Ajax,使用Ajax,我调用了一个包含javascript的php文件,但是这样,javascript就不起作用了 这里给出了main.html文件。它只是使用Ajax调用一个名为test1.php的php文件来更新客户端的所有页面 <!DOCTYPE html> <html> <body> <!-- run php file to fill the page --> <script>
<!DOCTYPE html>
<html>
<body>
<!-- run php file to fill the page -->
<script>
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.body.innerHTML = xmlhttp.responseText;
}
}
xmlhttp.open("GET","test1.php",true);
xmlhttp.send();
</script>
</body>
</html>
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
document.body.innerHTML=xmlhttp.responseText;
}
}
open(“GET”,“test1.php”,true);
xmlhttp.send();
test1.php文件是非常简单的测试,如下所示:
<p id="demo">Hi there</p>
<script>
document.write("Yes! Hi there");
alert('Welcome!');
</script>
你好
文档。写下(“是的!你好”);
警惕(“欢迎!”);
现在,为了检查test1.php是否正常,我输入了浏览器的url行:
localhost/test1.php
一切正常,html和js的文本都会显示出来,并且会出现一个警告窗口,上面写着欢迎!显示
但是如果我调用主页
localhost/main.html
然后只显示html文本“Hi there”。JS被忽略
有人知道这是为什么吗?
谢谢以下是3个基本示例,说明了如何使用ajax以及如何使用ajax: 主html js html php
我想给你一个建议,除了使用javascript,你还可以使用jquery-ajax,这对于ajax来说将是一件简单而最新的事情
您可以使用$.ajax函数。当您通过与服务器url联系进行AJAX调用时,可以通过此函数轻松使用json。如果您的url(如本例所示)是一个php页面,它将在服务器上执行,并返回到AJAX调用中,调用它生成的HTML。。。现在,您可以使用HTML并管理它,或者发布到当前页面的DOM中
-AJAX是执行服务器代码的服务器调用
-php页面上嵌入的脚本标记是HTML,当浏览器解析和执行时,它将执行客户端上包含的代码
所以。。。您的代码未执行,因为它从未被调用。。。对AJAX调用的响应将完全相同
<p id="demo">Hi there</p>
<script>
document.write("Yes! Hi there");
alert('Welcome!');
</script>
你好
文档。写下(“是的!你好”);
警惕(“欢迎!”);
php页面执行并将其作为text/html返回到当前页面
如果您想从javascript执行客户端代码,您应该将其放在同一个.js文件中或包含在另一个文件中,但如果您将其包含在服务器页面上,则需要将浏览器重定向到该页面,如果使用AJAX调用它,代码将无法执行,因为客户端浏览器无法解析它。Krasimir Tsonev有一个很好的解决方案,可以克服所有问题。他的方法不需要使用eval,因此不存在性能或安全问题。它允许您使用js设置innerHTML字符串包含html,并将其立即转换为DOM元素,同时还执行代码中存在的js部分。简短、简单,并且完全按照您的需要工作。
因此,在本例中,来自ajax的响应是src字符串,然后根据Krasimir Tsonev将其转换为DOM对象,然后让它与执行的js部分一起工作
var el = str2DomElement(xmlhttp.responseText);
document.body.innerHTML = el.innerHTML;
享受他的解决方案:
重要提示:
您需要用div标记包装目标元素
您需要用div标记包装src字符串
如果您直接编写src字符串并且它包含js部分,请注意正确地编写结束脚本标记(使用\before/),因为这是一个字符串
如果你读对了问题,他已经在使用AjaxThank了,这是正确的,但是我想深入研究纯代码(没有jquery来理解机制),然后,当然,为什么不呢。好的。我只是给你们介绍一下ajax的新事物。因为这种类型的ajax在浏览器不受支持时使用(jquery.:)感谢您提供非常详细的教学答案。在任何情况下,我都可以从中学到很多东西。但对于我提出的具体问题,请看我根据Krasimir Tsonev的回答。你读过提示的部分了吗?这就解释了如何同时发送html和javascript。是的。谢谢这一点。您提供了一些可以用于其他问题的技术,这是一套很好的工具。它应该与附加一起工作,而不是将其添加到innerHTML。Append将把它作为HTML追加,js应该被执行。昆汀是对的,那个线程有解决方案。
<?php
echo "<div>i'm html</div>";
?>
<?php
echo "var a='hello';alert(a);";
?>
<?php
$arr=array(array('id'=>'mytext2','data'=>'data'));
echo json_encode($arr);//json_decode
?>
function updateFields(){
for(var a=0,b;b=array[a];++a){
if(b.func){
(new Function(atob(b.func)))()
}else{
document.getElementById(b.id).textContent=b.data;
}
}
}
<?php
$arr=array(
array('id'=>'mytext2','data'=>'data'),
array('func'=>base64_encode("alert('jsonfunc')"))
);
echo json_encode($arr);//json_decode
?>
<p id="demo">Hi there</p>
<script>
document.write("Yes! Hi there");
alert('Welcome!');
</script>
var el = str2DomElement(xmlhttp.responseText);
document.body.innerHTML = el.innerHTML;