簡體   English   中英

如何從php函數進行自動javascript函數調用?

[英]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。

更新2:

好的,在解決了這個問題之后,您需要的是與函數綁定的自己的事件處理程序。 因此,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM