如何从php函数调用自动javascript函数?

时间:2010-02-09 00:02:46

标签: php javascript drupal-6

我正在尝试使用ajax / jquery,php / html和Drupal 6为表创建自动刷新。

数据库插入完成并成功后的代码:

echo "<script type='text/javascript'>autoRefresh()</script>";

最终调用实际执行表刷新的javascript代码的链接代码:

    $block_content .= "<br><a id='refreshItemId' class='refreshItemLink' href='$host_url/refresh/projectitems/gid/$curr_gid/nid/$curr_nid'>Refresh List</a>";

使用PHP添加到页面的Javascript代码(我知道它可能是一个javascript文件然后包含它,但那是另一天)。这是我添加的代码,用于在提交表单并将项目成功添加到数据库后尝试自动生成click()上面创建的链接:

    $block_content .= "<script type='text/javascript'>
        function autoRefresh()
        {
            alert('Auto Refresh');
            //document.getElementById('refreshItemId').click();
        }
    </script>";

我认为这会有效,但autoRefresh()JS函数永远不会被调用。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

您需要在“onload”事件处理程序中包装AutoRefresh调用。现在,该功能在输出到浏览器后立即运行(或尝试运行),因此此时没有按钮可以点击。

在jquery中:

<script type="text/javascrpt">
    $(function() {
        autoRefresh();
   });
</script>

更新

如果您希望在用户通过AJAX进行更改后单击刷新按钮,请执行以下操作:

$.ajax({
  data: //data sent to script;
  url: //path to PHP script
  success: autoRefresh();
  }
});

如果您只想在PHP脚本发送某种“安全词”时更新它,请将成功函数更改为检查服务器响应的内容,如果是“全部清除”信号,则执行autoRefresh。

更新2:

好的,把这个拿出来了,你需要的是你自己的事件处理程序绑定到函数。所以让PHP输出以下jquery脚本:

 <script type="text/javascript">

 $(function() {
     $("#refreshItemId").click(function() {
     $(this).delay('200');
     autoRefresh();
     });
 });

几个笔记:

延迟方法是jquery 1.4的新功能。如果您有旧版本,则可以使用其他方法来停止该功能。

我还没有机会惹这个.delay()那么多,所以我可能搞砸了一下。

但总的想法应该是明确的:在页面加载时将函数绑定到链接;当onclick事件触发该函数时,它会等待.2秒以便Drupal ajax完成;最后,它会触发autoRefresh函数。

答案 1 :(得分:0)

您需要在调用之前发送函数定义。

否则,用户代理(浏览器)会尝试调用尚不存在的函数,从而导致错误。

答案 2 :(得分:0)

如果您使用innerHTML或类似内容更新页面内容,则在将代码添加到DOM时不会执行代码。聪明地使用eval()可能会解决这个问题,尽管它也可能会让您面临潜在的XSS漏洞。最安全的路由是已经在页面中定义了函数,然后在XHR成功返回时调用它。

答案 3 :(得分:0)

修改!在与安东尼重读整个帖子之后:

夫妻俩:

  • 看看您是否可以在退货回复中添加“eval()”。

    echo "<script type='text/javascript'>eval('autoRefresh()');</script>";

  • 尝试将autoRefresh()函数放在head标记中调用的全局包含JS文件中。

另一种选择是覆盖drupal库中已有的函数,这样你就可以在Ajax调用中添加你想要做的事情。