我正在尝试使用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函数永远不会被调用。有什么想法吗?
答案 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。
好的,把这个拿出来了,你需要的是你自己的事件处理程序绑定到函数。所以让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调用中添加你想要做的事情。