2014-01-25 81 views
0

我想从ajax调用访问PHP函数,但我遇到了各种各样的问题,因为我是第一次做这样的事情。我需要帮助创建该功能或修复我拥有的功能。从ajax调用访问PHP函数

这是我的ajax调用(我将只发布的一小部分,因为完整的功能无关的问题)

$.ajax({ 
    type  : 'post', 
    url   : 'data.php?action=checkname', 
    data  : {'location':locationName}, 
    error  : function(data,status,error){ 
       console.log(data+': '+status+': '+error); 
      }, 
    success  : function(res){ 
       console.log(res); 
      }     
    }); 

PHP函数

<?php 
    function checkname(){ <--- What do I pass in the function??? 

     $locations = $_POST['location']; 

     echo $locations; 

    } 
?> 

如果我这样做这个“简单的方法”,只需调用该文件并执行类似的操作即可

$locations = $_POST['location']; 

echo $locations; 

我得到了我需要的回报,但只需要一个用于创建所有ajax调用的小文件就是错误的。

回答

1

您可以设置为PHP做这样的事情。使用Switch并为每个action指定一个名称,您的ajax是您想要激活的Case的名称。这样,您可以使用相同的文件并根据您的需要调用不同的功能。

<?php 
      $action = $_POST["action"]; 
      //check if it was sent using $_GET instead of $_POST 
      if(!$action) 
      $action = $_GET["action"]; 

      switch($action){ 
       case 'checkname': 
       checkname(); 
       break; 

       case 'otherfunction': 
       otherfunction(); 
       break; 

      }//switch 


    function checkname(){ 

       $locations = $_POST['location']; 

       echo $locations; 

    } 

    function otherfunction(){ 

       //do something else 

       //echo something; 

    } 
?> 

我没有把阿贾克斯,因为你已经有ajax调用。您的ajax的这部分是您将用于该操作的名称。 data.php?action=checkname 或者你可以使用这样的数据。

var action = 'checkname'; 

$.ajax({ 
    type  : 'post', 
    url   : 'data.php', 
    data  : {'location':locationName,'action':action}, 
    error  : function(data,status,error){ 
       console.log(data+': '+status+': '+error); 
      }, 
    success  : function(res){ 
       console.log(res); 
      }     
    }); 

您可以使用其他ajax函数,只需将变量操作更改为要调用的函数即可。

+0

除了检查你需要运行什么功能,或者你不需要发送任何东西外,我仍然不知道你是如何发送信息给函数的? – Geo

+0

@Geo看到我的更新,看到ajax –

+0

完成了!谢谢您的帮助 – Geo

0

你可以这样的代码的PHP内容:

<?php 
/*this part of code will be executed only when location parameter is set by post, 
thus can send multiple ajax requests to a single file*/ 
    if(isset($_POST['location'] && $_POST['location'] != "") 
    { 
    $location = $_POST['location']; 
    echo checkname($location); 
    } 

function checkname($location) 
{ 
    return $location; 
} 
+0

我认为这种方法太多,但似乎并不理想出于某种原因,由于额外的代码行,我有写入以容纳所有选项 – Geo

+0

如果完整的ajax请求的条件与校验和一样,那么将只有一个条件,然后所有的ajax代码都将在正常情况下进入,或者善意澄清问题。 –

1

添加一些条件文件:

$action = isset($_GET['action']) ? $_GET['action'] : null; 

switch($action) { 
    case 'checkname': 
     checkname(); 
    break; 
    case default: 
    // default action 
    break; 
}