【问题标题】:php echo javascript function after an ajax call doesnt work?ajax调用后的php echo javascript函数不起作用?
【发布时间】:2015-03-24 05:18:30
【问题描述】:

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

我尝试对 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 调用警报?因为我需要先在我的实际代码中使用服务器端的数据库来验证一些东西。

【问题讨论】:

  • 不要把你的javascript放在echo中。编辑:抱歉,Ajax 请求在哪里?
  • 1:w3fools.com 2:在回显 javascript 的地方,这永远不会起作用。将您的函数放入 javascript 中,然后在 php 中回显将在 javascript 中测试的内容,并根据测试运行您想要的函数。
  • 这也许能帮到你更多 -> stackoverflow.com/questions/3514096/…
  • @CodeBird 你能更好地解释一下吗,因为我尝试使用运行现有函数的 onload 回显一个元素,但它也不起作用。
  • 贴上你的函数代码,我给你编辑解释一下。

标签: javascript php jquery html ajax


【解决方案1】:

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

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

但是,在这种情况下,在测试了其中的一些(如“script”和“img”)后,它仍然不能与所有标签一起使用,但它可以与“style”标签一起使用。不过我没有测试所有其他标签。

所以这将我的代码更改为:

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

现在它确实运行了这个函数。


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

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

【讨论】:

  • 我需要等待 2 天才能接受我自己的答案:/
【解决方案2】:

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

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

【讨论】:

  • 试过了,虽然已经没有运行警报。我什至尝试回显一个具有 onload 的元素,该元素也不起作用。编辑 onclick 似乎确实有效:/
  • 这仅适用于单引号和双引号问题。请检查一下。
【解决方案3】:

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

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

【讨论】:

  • 老实说,我不知道这将如何解决问题,但如果我还没有找到答案,我会尝试的。不过仍然是一个有用的功能。
【解决方案4】:

试试这个:

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

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

【讨论】:

  • 您应该修改该解决方案中的代码以应用于此示例,或者至少包括它的大纲。
猜你喜欢
  • 2021-10-01
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
  • 2012-04-12
相关资源
最近更新 更多