PHP echo JavaScript 函数在 Ajax 调用后不起作用

php echo javascript function after an ajax call doesnt work?

本文关键字:调用 不起作用 Ajax echo JavaScript 函数 PHP      更新时间:2023-09-26

所以我遇到了一个问题,我在任何地方都找不到好的解决方案。我相信更多的人会遇到这个问题。

我试图对 php 脚本进行 Ajax 脚本调用,该脚本再次回显 JavaScript 函数,但该函数不会运行或激活。但是,如果您确实检查元素,它确实会显示在代码中。

所以html和Ajax如下。它的虚拟代码,因为我自己的代码有点复杂。所以我在这里犯的任何语法错误都不是解决方案,因为这适用于我代码的其他部分。

<html><headbodyetc>
    <div id='change'>
        //is supposed to alert or call another js function after 
        //verifying something with a database for instance.
        <button type='button' onclick='ajaxbelow();'>alert</button>
    </div>
    <script type='text/javascript'>
        function ajaxbelow(){
        //AJAX code as found on w3schools.com/php/php_ajax_php.asp
        //calls the change.php
    </script>
</etc></html>

被调用的 php 代码非常简单。

//This shows up in the html-code after clicking the button but doesnt run.
echo"<script type='text/javascript'>alert('doenst work?')</script>";

所以我正在寻找一种解决方案,使我能够在 Ajax 调用后运行 JavaScript 或 jquery 函数,或者这是它不起作用的主要原因。因为我找不到它。

Inb4 为什么要通过 php 调用警报?因为我需要首先在我的实际代码中使用服务器端的数据库验证某些内容。

因此,在组合和测试了一些评论之后,我想出了自己的答案。你不能在php echo中创建新的javascript。但是,您可以回显调用现有函数的 onload。加载仅适用于以下标签:

"body"、"frame"、"frameset"、"iframe"、"img"、"input type="image"、"link"、"script"、"style"。

然而,在这种情况下,在测试了其中一些(如"脚本"和"img")之后,它仍然不适用于所有标签,但它适用于"样式"标签。不过,我没有测试所有其他标签。

因此,将我的代码更改为:

<html><headbodyetc>
<div id='change'>
    //is supposed to alert or call another js function after 
    //verifying something with a database for instance.
    <button type='button' onclick='ajaxbelow();'>alert</button>
</div>
<script type='text/javascript'>
    //function to be called
    function test(){
        alert("now it works");
    }
    function ajaxbelow(){
    //AJAX code as found on w3schools.com/php/php_ajax_php.asp
    //calls the change.php
</script>
</etc></html>

然后 PHP 代码将变为

echo"<style onload='test();'></style>";

现在它确实运行了该功能。


编辑这似乎不适用于IE,现在正在寻找解决方案。

^编辑:默认情况下,IE浏览器"否认"脚本抛出提示的能力。因此,要启用此功能,您必须转到[工具/Internet选项/安全性/自定义级别/"允许网站使用脚本窗口提示输入信息"]并启用...刷新后,你将在 IE 中看到警报:)

只需在单引号前添加斜杠,如下所示

   <?php echo '<script type="text/javascript">alert(''doenst work?'')</script>'; ?>

你可以使用 eval() 来评估返回的 javascript。如果使用此方法,则不需要脚本标记。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

试试这个:

http://www.webdeveloper.com/forum/showthread.php?184830-Ajax-echo-script-problem

Javascript是一种事件驱动的语言,由于此时没有任何东西告诉javascript运行,所以它只是坐在那里什么都不做。如果该代码在浏览器加载页面时存在,那么解析代码的浏览器就会告诉它运行。因此,您需要做的是评估返回的任何脚本