2014-09-05 88 views
6

对于我来说这是新东西,所以我只是在研究并试图理解它。 正如你可以在PHP脚本中看到有2个函数,我试图用jQuery调用特定的一个。使用Jquery&Ajax从PHP调用特定函数

现在,如果我有一个功能,那么我可以做到这一点,但是当我有2个或更多,我开始卡住了。 我想我可以做到这一点,当我有2个功能,但只要更多的变量在玩或更多的功能,我只是在我的PHP大量if语句?

问题是,当我将数据库附加到它时,我需要考虑可能发生的所有输入。 如何在使用jquery & ajax时指定特定的php函数?

//function.php 
<?php 
    function firstFunction($name) 
    { 
     echo "Hello - this is the first function"; 
    } 

    function secondFunction($name) 
    { 
     echo "Now I am calling the second function"; 
    } 

?> 

<?php 
    $var = $_POST['name']; 

    if(isset($var)) 
    {  
     $getData = firstFunction($var); 
    } 
    else if(isset($var)) 
    { 
     $getData = secondFunction($var); 
    } 
    else 
    { 
     echo "No Result"; 
    } 

?> 

//index.html 
<div id="calling">This text is going to change></div> 

<script> 

    $(document).ready(function() { 
     $('#calling').load(function() { 
     $.ajax({ 
      cache: false, 
      type: "POST", 
      url: "function.php", 
      data: 'name=myname' 
      success: function(msg) 
      { 
       $('#calling').html((msg)); 
      } 

      }); // Ajax Call 
     }); //event handler 
    }); //document.ready 

</script> 
+0

发送

var count_id = "count"; data: { count_id: count_id }, 

然后在你的PHP检查*旁注:*在isset的''的情况下else'( $ var)',你传递一个null到'secondFunction()' – Raptor 2014-09-05 01:26:07

+0

是的,但是如果有一个if else呢?那么它将如何知道要发表什么声明呢? – 2014-09-05 01:27:20

+0

ajax是一个红色的听证会,其不敬的 – 2014-09-05 01:29:25

回答

10

您需要在传递一个参数,或者通过数据对象或通过在URL中的GET变量。或者:

url: "function.php?action=functionname" 

或:

data: { 
    name: 'myname', 
    action: 'functionname' 
} 
在PHP

然后,您可以访问属性和处理它:

if(isset($_POST['action']) && function_exists($_POST['action'])) { 
    $action = $_POST['action']; 
    $var = isset($_POST['name']) ? $_POST['name'] : null; 
    $getData = $action($var); 
    // do whatever with the result 
} 

注:出于安全原因,一个更好的主意是将可用功能列入白名单,例如:

switch($action) { 
    case 'functionOne': 
    case 'functionTwo': 
    case 'thirdOKFunction': 
     break; 
    default: 
     die('Access denied for this function!'); 
} 

实现的例子:

// PHP: 
function foo($arg1) { 
    return $arg1 . '123'; 
} 

// ... 
echo $action($var); 

// jQuery: 
data: { 
    name: 'bar', 
    action: 'foo' 
}, 
success: function(res) { 
    console.log(res); // bar123 
} 
+0

IMO,不要在'$ _POST'值上使用'function_exists()'。潜在的安全错误/有可能破坏页面/服务器。想象一下这个动作是'fopen','passthru'还是'ini_set' ... – Raptor 2014-09-05 01:32:41

+0

所以'行动:'功能名称的关键字? – 2014-09-05 01:34:29

+0

@JeffKranenburg是的,它只是一个示例变量名称。正如猛禽提到的,调用任何函数可能都不合适 - 所以我会建议一个白名单(将添加到答案) – 2014-09-05 01:37:58

3

你实际上是非常接近你想要达到的目标。

如果您想指定哪个函数将在PHP中调用,您可以传递一个变量来告诉PHP。例如,你在AJAX通过request=save,您可以编写PHP如下:

$request = ''; 
switch(trim($_POST['request'])) { 
    case 'save': 
    $player_name = (isset($_POST['playername']) ? trim($_POST['player_name']) : 'No Name')); 
    saveFunction($player_name); 
    break; 
    case 'load': 
    loadFunction(); 
    break; 
    default: 
    // unknown/missing request 
} 

编辑:你甚至可以与其他参数

+0

啊我看到你在说什么,很酷,我会玩一玩。 – 2014-09-05 01:36:25

+0

你的理念奏效了,然而@scrowler给了更多信息。 – 2014-09-05 01:57:08

0

传递下去,这可能不是正是你在找什么但它可以帮助其他人寻找一个非常简单的解决方案。

在你的jQuery声明一个变量,如果这个变量被设置

if(isset($_POST['count_id'])) { 

Your function here 

}