2015-02-06 90 views
0

我有一個文件ajax.php,我用它來處理通過jquery傳遞的數據。我已經呼籲成功形式的驗證碼這一行:在我的情況從json_encode響應獲取特定數據

$.post("/ajax.php",{'request': 'emailLogin', 'loginmail': mail, 'loginpass': pass}, function(data) {} ); 

數據是:{"valid":true}{"auth":false}其返回從ajax.php的響應,但我似乎無法文件的正確方法定義「auth」和一個值爲「false」的變量。

我的ajax.php只是檢查登錄名和密碼是否在數據庫中,而不是echo json_encode(array('auth' => false));echo json_encode(array('auth' => true));,具體取決於結果。但是,它也包含這些行:

if(isset($_POST['loginmail'])) { 
    $usermail = htmlspecialchars($_POST['loginmail']); 

    if (!filter_var($usermail, FILTER_VALIDATE_EMAIL)) { 
     $response = array('valid' => false, 'message' => 'You did not enter a correct email address.'); 
    } else {      
     // All good 
     $response = array('valid' => true); 
    } 
} 
echo json_encode($response); 
+0

你的數據似乎是返回兩個JSON對象而不是一個。一旦你解決了這個問題,你有沒有在'ajaxSetup'中設置'dataType'爲'json'? http://api.jquery.com/jQuery.ajaxSetup/ – 2015-02-06 01:00:28

+0

你應該發佈你的'ajax.php'因爲問題似乎在那裏,而不是在你的JS – Machavity 2015-02-06 01:01:29

+0

這是正確的。一個用於確認驗證,另一個驗證。 – 2015-02-06 01:01:44

回答

1

請不要回顯json_encode($response)與認證結果分開,你需要結合起來。你做的認證後,執行:

$response['auth'] = $result_of_authentication; 

然後做

echo json_encode($response); 

一旦你這樣做,你應該能夠訪問data.auth在Javascript。你應該告訴$.post它返回JSON:

$.post("/ajax.php",{ 
     'request': 'emailLogin', 
     'loginmail': mail, 
     'loginpass': pass}, 
    function(data) { 
     alert(data.auth); 
    }, 
    "json"); 
+0

我做到了,好人,現在我的回答是:'{「valid」:true,「auth」:「false」}' – 2015-02-06 01:26:48

0

基於PHP代碼,你應該能夠訪問有效的屬性,像這樣:

$.post("/ajax.php",{'request': 'emailLogin', 'loginmail': mail, 'loginpass': pass}, function(data) { 
    var auth = data.valid; 
    if (auth) { 
     // do something! 
    } else { 
     // do something else! 
    } 
}); 

也有是在你的PHP代碼中的錯誤,你需要設置爲$響應的默認值,如下所示:

$response = array('valid' => false, 'message' => 'Email address is required'); 

if(isset($_POST['loginmail'])) { 
    $usermail = htmlspecialchars($_POST['loginmail']); 

    if (!filter_var($usermail, FILTER_VALIDATE_EMAIL)) { 
     $response = array('valid' => false, 'message' => 'You did not enter a correct email address.'); 
    } else {      
     // All good 
     $response = array('valid' => true); 
    } 
} 

echo json_encode($response); 

否則,如果$_POST['loginmail']沒有設置你的應用程序與拋出一個不確定的變量例外

編輯:

正如Barmar在他的回答中指出的,你應該只回應一次迴應,以避免產生無效迴應。您需要的任何數據都應該發回到一個數組中。我沒有看到你在你的PHP代碼中這樣做,但你確實提到了回顯另一個陣列['auth' => false]這將不會按照你想要的方式工作

+0

在他修復無效JSON的問題之前,這是行不通的。 – Barmar 2015-02-06 01:17:38

+0

我不確定從他的代碼中無效的JSON會來自哪裏。希望他的示例數據只是不正確 – 2015-02-06 01:21:05

+0

哦,我想我明白你在說什麼,在他的問題中,他確實提到了兩次迴應json_encodeded數據... – 2015-02-06 01:22:38