我意识到从JavaScript文件调用数据库不是一个好方法。所以我有两个文件:
server.php有多个功能。 根据条件,我想调用server.php的不同功能。 我知道如何调用server.php,但如何在该文件中调用不同的函数?
我目前的代码如下:
function getphp () {
//document.write("test");
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
// data is received. Do whatever.
}
}
xmlhttp.open("GET","server.php?",true);
xmlhttp.send();
};
我想做的是(只是伪代码。我需要实际的语法):
xmlhttp.open("GET","server.php?functionA?params",true);
答案 0 :(得分:5)
基于这个前提,你可以设计这样的东西:
在像这样的样本请求上:
xmlhttp.open("GET","server.php?action=save",true);
然后在PHP中:
if(isset($_GET['action'])) {
$action = $_GET['action'];
switch($action) {
case 'save':
saveSomething();
break;
case 'get':
getSomething();
break;
default:
// i do not know what that request is, throw an exception, can also be
break;
}
}
答案 1 :(得分:1)
做这样的事情,我希望这会有用
xmlhttp.open("GET","server.php?function=functioName¶msA=val1¶m2=val2",true);
答案 2 :(得分:1)
您很可能需要自己创建机制。
说网址看起来像server.php?function=foo¶m=value1¶m=value2
在服务器端,您现在必须检查是否存在具有此名称的函数,如果存在,请使用这些参数调用它。有关如何执行此操作的有用链接是http://php.net/manual/en/function.function-exists.php和http://php.net/manual/en/functions.variable-functions.php
否则,如果你不想这样,你可以随时使用if / switch,只需检查是否$ _GET [" function"]是什么,然后调用一些东西等
答案 3 :(得分:1)
您也可以使用jQuery。代码比纯js少得多。我知道纯js更快但jQuery更简单。在jQuery中,您可以使用$.ajax()
发送您的请求。它需要一个像这样的json结构化数组:
$.ajax({
url: "example.php",
type: "POST",
data: some_var,
success: do_stuff_if_no_error_occurs(),
error: do_stuff_when_error_occurs()
});
答案 4 :(得分:1)
这是解决此问题的动态方法:
xmlhttp.open("GET","server.php?action=save",true);
PHP代码:
<?php
$action = isset($_GET['action']) ? $_GET['action'] : '';
if(!empty($action)){
// Check if it's a function
if(function_exists($action)){
// Get all the other $_GET parameters
$params = array();
if(isset($_GET) && sizeof($_GET) > 1){
foreach($_GET as $key => $value){
if($key != 'action'){
$params[] = $value;
}
}
}
call_user_func($action, $params);
}
}
?>
请记住,您应该以相同的函数参数顺序发送参数。 让我们说:
xmlhttp.open("GET","server.php?action=save&username=test&password=mypass&product_id=12",true);
<?php
function save($username, $password, $product_id){
...
}
?>
您无法以这种方式编写API调用:
xmlhttp.open("GET","server.php?action=save&password=mypass&username=test&product_id=12",true);
请记住,将“函数名称空间”和参数一起发送到后端是非常糟糕的。你暴露你的后端,没有适当的安全措施,你的网站将容易受到SQL注入,字典攻击,暴力攻击(因为你没有检查哈希或其他东西),并且几乎可以访问它任何人(你正在使用POST的GET,任何人都可以进行字典攻击,试图访问几个函数......没有特权检查)等。
我的建议是你应该使用像Yii Framework这样的稳定的PHP框架,或其他任何东西。 当您向后端发送数据时,避免使用GET。请改用 POST 。