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