从javascript调用不同的PHP函数

时间:2014-10-03 07:20:20

标签: javascript php

我意识到从JavaScript文件调用数据库不是一个好方法。所以我有两个文件:

  1. client.js
  2. server.php
  3. 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);
    

5 个答案:

答案 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&paramsA=val1&param2=val2",true);

答案 2 :(得分:1)

您很可能需要自己创建机制。

说网址看起来像server.php?function=foo&param=value1&param=value2

在服务器端,您现在必须检查是否存在具有此名称的函数,如果存在,请使用这些参数调用它。有关如何执行此操作的有用链接是http://php.net/manual/en/function.function-exists.phphttp://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