2014-04-01 51 views
0

實際上,我發送的數組包含多個數組到PHP與ajax驗證{登錄或註銷}。ajax POST數組與多個電子郵件到PHP進行驗證,但驗證/ PHP函數不工作

HTML/JQ:

var arr = ['[email protected]','[email protected]','[email protected]',[email protected]' ....]; 
$.ajax({ 
    url: "verify.php?action=email", 
    type: "post", 
    data: "email="+arr, 
    dataType: "json", 
    cache: false, 
    success: function(response){ 
    alert(response.status); 
    }, 
    error: function(jqXHR,textStatus,errorThrown){ 
    alert(textStatus); 
    } 
}); 

PHP:

define('INCLUDE_CHECK',true); 
include('functions.php'); 
header('Content-Type: application/json'); 
$data = array(); 

switch($_GET['action']) { 
    case 'email': 
    $items[] = explode(',', $_POST['email']); 
    foreach($items as $key){ 
     $n[] = getStatus($key); // getStatus function is defined in "functions.php" 
    } 
    $data['status'] = $n; 
    break; 
} 

echo json_encode($data); 

現在的問題是:它空返回每一次,而不是 「在線」 或 「離線」。但如果我只通過一封電子郵件,效果很好。像:

$n = getStatus('[email protected]'); 
$data['status'] = $n; 

任何溶液....

thnks &問候

UPDATE:

其作品時陣列手動操縱:

$items = array('[email protected]','[email protected]'....); 
    foreach($items as $key){ 
     $n = getStatus($key); 
     $data['status'] = $n; 
    } 

for loop在ajax success函數中。

,但我想通過從jQuery的數組到PHP

UPDATE:ANSWER

$items = explode(',', $_POST['email']); 
foreach($items as $key){ 
    $data['status'][] = getStatus($key); 
} 

與JQ:

success: function(response){ 
    for(var i in response.status){ 
    alert(response.status[i]); 
    } 
}, 

感謝&問候

+0

我的函數foo返回null,爲什麼?..爲什麼要隱藏你的'getStatus'實現? –

+0

首先是'$ n []'得到一個數組或一個值,因爲如果它有一個值,它將在循環的每次迭代中被覆蓋。其次,你確定你不需要在瀏覽器端使用JSON.stringify,而在服務器端使用json_decoded來傳遞json字符串? – Sebastien

+0

@vp:'getStatus'應該返回「在線」或「離線」。並且我沒有;這個代碼,bcz這不是必需的 –

回答

0

這是不是真的我清楚你試圖做什麼。

這樣的事情?

define('INCLUDE_CHECK',true); 
header('Content-Type: application/json'); 
$data = array(); 
$items = array(); 

switch($_GET['action']) { 
    case 'email': 
    $items = explode(',', $_POST['email']); 
    foreach($items as $key){ 
     $data['status'][] = "bar"; // getStatus function is defined in "functions.php" 
    } 
    break; 
} 

echo json_encode($data); 

將所有狀態的數組發送回jQuery。

本地測試並使用您的html代碼。 反應是:

{"status":["bar","bar","bar","bar"]} 

,如果你要發送的所有狀態將jQuery或只是一個狀態的陣列是不是真的清楚嗎?

0

你需要做的

$items[] = explode(',', json_decode($_POST['email'])); 

假設你的函數能正常工作。

編輯

switch($_GET['action']) { 
case 'email': 
    $items[] = explode(',', $_POST['email']); 
    $n = array(); //add this 
    for($x=0;$x<count($items);$x++){ 
     $n[$x] = getStatus($key); // getStatus function is defined in "functions.php" 
    } 
    //$data['status'] = $n; 
    break; 
} 

echo json_encode($n); 

回報所有其他代碼正常,但改變alert(response.status);alert(response);

+0

不工作:(得到'null' –

+0

右鍵 - 'print_r($ n)'而不是回顯$ data並且看到你得到了什麼 –

+0

'print_r($ n)':'parsererror:SyntaxError:JSON .parse:意外字符 和 'print_r json_encode($ data);':'error:Internal Server Error' –

0

你檢查使用類似F12工具響應的狀態?這可能是因爲你的PHP示數並從不返回值(除了500個狀態碼),這可能是爲什麼:

data: "email="+arr 

arr是一個JavaScript陣列,像['blah1','blah2','blah3']。當轉換爲字符串時,您獲得blah1,blah2,blah3

由於您傳遞的arr附加到"email=",最終得到的結果類似[email protected],[email protected],[email protected]。由於您傳遞的值爲string作爲您的data值,因此JQuery可能將此權限作爲原始POST主體提供,PHP可能在解析它時遇到困難。

如果您使用此語法,應該按預期工作:

var arr = ['[email protected]','[email protected]','[email protected]',[email protected]' ....]; 
$.ajax({ 
    url: "verify.php?action=email", 
    type: "post", 
    data: { email: arr.toString() }, 
    dataType: "json", 
    cache: false, 
    success: function(response){ 
    alert(response.status); 
    }, 
    error: function(jqXHR,textStatus,errorThrown){ 
    alert(textStatus); 
    } 
}); 
+0

其不工作:( –

+0

)您可以打開F12工具並查看從服務器返回的響應類型嗎? –