如何从javascript onclick()事件调用php函数?

时间:2010-01-10 20:50:49

标签: php javascript drupal-6

例如,我有一个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进程,所以请没有回复说。必须有某种技巧可以做到这一点。或者也许有更好的方法来做我想要完成的事情。

5 个答案:

答案 0 :(得分:4)

由于您知道服务器端的PHP进程和客户端的javascript进程,您还必须意识到您无法从javascript调用PHP“函数”。您的客户端代码可以重定向到PHP页面,或使用AJAX调用PHP程序。该页面或程序必须位于服务器上,并且它应该比您在函数中的一行更多。它还应检查身份验证,授权等。您不希望任何地方的任何客户端脚本都可以调用您的PHP。

答案 1 :(得分:2)

您需要使用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"]);

答案 2 :(得分:2)

您需要编写一个将执行该功能的PHP脚本。要打电话,要么:

  • 使用XMLHttpRequest(又名Ajax)发送请求
  • 更改页面的location.href并从PHP返回HTTP状态代码204 No Content

答案 3 :(得分:2)

你实际上无法在JavaScript中调用PHP函数。正如@Christoph所写,你需要通过JavaScript中的普通HTTP请求使用称为AJAX的魔法来调用PHP脚本(愚蠢的缩写,基本上意味着JS可以动态加载外部HTTP请求)。

看看jQuery关于如何通过JS可靠地发出HTTP请求的AJAX功能,请参阅http://docs.jquery.com/Ajax

所有正常的安全规则都适用,即确保您过滤传入的数据并确保它符合您的预期(示例中为$ item_id)。请记住,没有什么可以阻止某人手动访问JS请求的URL。

答案 4 :(得分:0)

首先,使用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>