2014-01-25 90 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; 
}