[英]How do I make an automatic javascript function call from php function?
我正在嘗試使用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函數從未被調用過。 有任何想法嗎?
您需要將AutoRefresh調用包裝在“ onload”事件處理程序中。 現在,該功能在輸出到瀏覽器后即開始運行(或嘗試運行),因此此時無需單擊任何按鈕。
在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事件觸發該函數時,它會等待0.2秒以使Drupal ajax完成。 最后,它會觸發autoRefresh函數。
您需要在調用函數定義之前發送它。
用戶代理(瀏覽器)否則會嘗試調用尚不存在的函數,從而導致錯誤。
如果要使用innerHTML
或類似內容更新頁面的內容,則將代碼添加到DOM后將不會執行該代碼。 聰明地使用eval()
可能會解決此問題,盡管它也可能使您面臨潛在的XSS漏洞。 最安全的方法是已經在頁面中定義了函數,然后在XHR成功返回時調用它。
編輯! 用Anthony重新讀取整個線程后:
幾件事情:
看看是否可以在返回響應中添加“ eval()”。
echo "<script type='text/javascript'>eval('autoRefresh()');</script>";
嘗試將autoRefresh()函數放在head標記中調用的全局include JS文件中。
另一種選擇是覆蓋您的drupal庫中已經存在的函數,以便您可以在Ajax調用中添加您想做的那些事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.