2013-10-18 65 views
13

參數我有一個PHP文件func.php在那裏我定義了許多功能,讓我們說:調用PHP函數使用jQuery

<? php 
function func1($data){ 
return $data+1; 
} 
?> 

我想用AJAX致電function func1。感謝您的幫助

+0

你試過了什麼?你得到的錯誤是什麼?乍看之下,我會說你應該通過使用AJAX來傳遞一些價值,然後你的PHP腳本會選擇這個值,然後用.... switch語句運行所需的函數。 – Crackertastic

+0

所有的功能都接受一個參數嗎? – geomagas

+0

@geomagas,no我有超過一個參數的函數 –

回答

28

你不能從一個AJAX調用直接調用PHP函數,但你可以做到這一點:

PHP:

<? php 
    function func1($data){ 
     return $data+1; 
    } 

    if (isset($_POST['callFunc1'])) { 
     echo func1($_POST['callFunc1']); 
    } 
?> 

JS:

$.ajax({ 
    url: 'myFunctions.php', 
    type: 'post', 
    data: { "callFunc1": "1"}, 
    success: function(response) { alert(response); } 
}); 
6

您應該通過一個Ajax請求調用PHP腳本,使用jquery,如:

的Javascript:

$.ajax({ 
    url: "script.php", 
    data: { param1: "value1", param2: "value2" }, 
    type: "GET", 
    context: document.body 
}).done(function() { 
    // your code goes here 
}); 

你可以通過AJAX對象的數據屬性給你的參數。

// you can do isset check before 
$param1 = $_GET['param1']; 
$param2 = $_GET['param2']; 

// validate // sanitize // save to db // blah blah // do something with params 

的更多信息,你可以從jQiery.ajax()函數的描述得到http://api.jquery.com/jQuery.ajax/

+1

那麼,這將參數發送到PHP腳本,但是如何將它們饋送到該腳本中的PHP函數? – Steve

+0

好的史蒂夫。真正。發佈編輯。 –

1

它更復雜一點,但我會盡量縮小下來的基礎。

你將需要調用者和腳本之間的某種接口(基本上是一種約定)。這裏主要關注兩個問題:

  1. 腳本理解需要調用哪些內容以及使用哪些參數。假設您決定使用GET請求來調用函數。函數名稱可以在func字段中,參數爲args之一,作爲由;分隔的字符串。換言之,致電funcFoo(5,'bar')將通過請求func.php?func=func1&args=5;bar完成。

  2. 調用方接收(並理解)返回值的方式。由於您的要求是面向js的,所以JSON方法將非常合適。

添加以下代碼與功能一起:

if(isset($_GET['func'])) 
    { 
    $func=$_GET['func']; 
    if(function_exists($func)) 
    { 
    $args=(isset($_GET['args'])?explode(';',$_GET['args']):array()); 
    $result=call_user_func_array($func,$args); 
    } 
    else 
    $result=array('error'=>"Unknown Function $func!"); 
    } 
else 
    $result=array('error'=>"No function name provided!"); 
echo json_encode($result); 

然而,你的函數應該也可以改變,以滿足新的需求。由於無法告訴調用者將提供多少個參數,函數應該設計爲不接受強制參數並檢查提供的參數本身。此外,它應該始終返回一個數組,以便在返回給調用方之前爲json_encode d。

你的榜樣作用,例如,應該是這個樣子:

function func1(){ 
    $data=func_get_args(); 
    if(count($data)) // at least one -- rest will be ignored 
     return $data[0]+1; 
    else 
     return array('error'=>__FUNCTION__."() expects an argument!"); 
} 

要知道,雖然:這僅僅是一個框架,以幫助您開始使用的整個概念。 容錯安全應該多加小心。但那是另一個話題的主題。