PHP / HTML / JavaScript: & lt; script>使用echo异步调用时不工作


PHP/HTML/JavaScript: <script> not working when called asynchronously using echo

我的网页上的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();

Javascript;

$.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);
});