簡體   English   中英

如何從javascript onclick()事件中調用php函數?

[英]How do I call a php function from javascript onclick() event?

例如,我有一個php函數:

function DeleteItem($item_id)
{
     db_query("DELETE FROM {items} WHERE id=$item_id");
}

然后,我有如下內容:

<html>
<head>
<script type="text/javascript">
function DeleteItem($item_id)
{
     alert("You have deleted item #"+$item_id);
}
</script>
</head>

<body>
<form>
Item 1
<input type="button" value="Delete" onclick="DeleteItem(1)" />
</form>
</body>
</html>

我希望能夠從javascript函數DeleteItem()調用PHP函數DeleteItem(),以便可以使用Drupal的db_query()函數,因此不必嘗試從javascript建立與數據庫的連接。

有沒有人對如何做到這一點有什么建議? 附言:我知道服務器端的PHP進程和客戶端的javascript進程,所以請不要回答。 為了完成這項工作,必須采取某種技巧。 也許有一種更好的方式來完成我要完成的任務。

因為您知道服務器端的PHP進程和客戶端的javascript進程,所以您還必須意識到您無法從javascript調用PHP“函數”。 您的客戶端代碼可以重定向到PHP頁面,或使用AJAX調用PHP程序。 該頁面或程序必須在服務器上,並且它所要做的不只是功能上的一行。 它還應該檢查身份驗證,授權等。您不希望任何客戶端腳本在任何地方調用您的PHP。

您將需要為此使用ajax 此外,您甚至不應該考慮使用javascript內部的數據庫連接作為選項-十分不安全。

一個非常簡單的例子:

//in javascript
function DeleteItem($item_id) {
    $.post("delete.php", { id: $item_id}, function(data) {
        alert("You have deleted item #"+$item_id);
    });
}

//in php file
db_query("DELETE FROM {items} WHERE id=" . $_REQUEST["id"]);

您需要編寫一個PHP腳本來執行該功能。 要調用它,可以:

  • 使用XMLHttpRequest (aka Ajax)發送請求
  • 更改頁面的location.href並返回HTTP狀態代碼204 No Content PHP中204 No Content

您本身無法在JavaScript內實際調用PHP函數。 正如@Christoph所寫的那樣,您需要使用一種稱為AJAX的魔術從JavaScript內部通過正常的HTTP請求來調用PHP腳本(愚蠢的縮寫,基本上意味着JS可以動態加載外部HTTP請求)。

看一下jQuery的AJAX功能,了解如何通過JS可靠地發出HTTP請求,請參閱http://docs.jquery.com/Ajax

所有正常的安全規則都適用,即確保您過濾輸入的數據並確保其符合您的期望(示例中的$ item_id)。 請記住,沒有什么可以阻止某人手動訪問您的JS請求的URL。

首先,使用jQuery。

然后,您的代碼將必須類似於:

<input ... id="item_id_1" />

<script>
$(document).ready(function() {
   $('input').click(function(){
      var item_id = $(this).attr('id');
      item_id = item_id.split('_id_');
      item_id = item_id[1];
      $.get('/your_delete_url/' + item_id);
   });
});
</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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