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