ajax调用后,php echo javascript函数不起作用?

时间:2014-04-01 09:13:20

标签: javascript php jquery html ajax

所以我遇到了一个问题,我无法在任何地方找到一个好的解决方案。而且我确定会有更多人遇到这个问题。

我尝试对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调用警报?因为我需要在实际代码中首先使用服务器端的db验证某些内容。

4 个答案:

答案 0 :(得分:2)

所以在结合并测试了一些评论后,我想出了自己的答案。 你不能在php echo中创建新的javascript。但是,您可以回显调用现有函数的onload。 Onload仅适用于以下标记:

&#34; body&#34;,&#34; frame&#34;,&#34; frameset&#34;,&#34; iframe&#34;,&#34; img&#34;,&# 34;输入类型=&#34;图像&#34;,&#34;链接&#34;,&#34;脚本&#34;,&#34;样式&#34;。

然而在这种情况下,在测试其中一些像&#34; script&#34;和&#34; img&#34;它仍然不适用于所有标签,但是它采用了&#34;样式&#34;标签。我没有测试所有其他标签。

因此我将代码更改为:

<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浏览器&#34; DENY&#34;脚本抛出提示的能力。因此,要启用此功能,您必须转到[工具/ Internet选项/安全/自定义级别/&#34;允许网站使用脚本化窗口提示信息&#34;]并启用...一旦刷新,您将在IE中看到你的警报:)

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:-1)

试试这个:

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

  

基本上没有任何反应的原因是因为你只是在DOM中粘贴内容。 Javascript是一种事件驱动的语言,因为没有任何东西告诉javascript在这一点上运行,它只是坐在那里什么都不做。如果在浏览器加载页面时存在该代码,则解析代码的浏览器将告诉它运行。所以,你需要做的是评估任何回来的脚本