php文件中的JavaScript不会';使用Ajax调用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>

使用Ajax,我调用了一个包含javascript的php文件,但是这样,javascript就不起作用了

这里给出了main.html文件。它只是使用Ajax调用一个名为test1.php的php文件来更新客户端的所有页面

 <!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;