从json_encode响应中获取特定数据

时间:2015-02-06 00:58:29

标签: php jquery json

我有一个文件ajax.php,我用它来处理通过jquery传递的数据。我在成功的表单验证中调用了这一特定代码:

$.post("/ajax.php",{'request': 'emailLogin', 'loginmail': mail, 'loginpass': pass}, function(data) {}  ); 
在我的情况下,

数据是:{"valid":true}{"auth":false}作为来自ajax.php的响应返回,但我似乎无法提交正确的定义方式" auth"和值为#34; 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);

2 个答案:

答案 0 :(得分:1)

不要与验证结果分开回显json_encode($response),您需要将它们组合起来。执行身份验证后,执行:

$response['auth'] = $result_of_authentication;

然后做

echo json_encode($response);

执行此操作后,您应该可以在Javascript中访问data.auth。您应该告诉$.post它返回JSON:

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

答案 1 :(得分: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设置默认值,如下所示:

$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],它不会按照你想要的方式工作