2015-02-06 4 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».

My 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 объектов вместо одного. Как только вы исправите это, установили ли 'dataType'' json' в 'ajaxSetup'? http://api.jquery.com/jQuery.ajaxSetup/ –

+0

Вы должны написать свой 'ajax.php', так как проблема, кажется, есть, а не в вашем JS – Machavity

+0

Это правильно. Один используется для подтверждения проверки, другой проверки подлинности. –

ответ

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 "}' –

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'] не установлено приложение с забросить неопределенное переменное исключение

EDIT:

Как указал Бармар в своем ответе, вы должны только откликнуться назад, чтобы избежать создания недействительного ответа. Любые данные, которые вам нужны, должны быть отправлены обратно в один массив. Я не вижу, что вы делаете, что в вашем PHP коде, но вы славите вторя другой массив ['auth' => false], который не будет работать так, как вы хотите его

+0

Это не сработает, пока он не устранит проблему с недействительным JSON. – Barmar

+0

Я не уверен в его коде, откуда исходит недействительный JSON. Надеюсь, его примерные данные были просто неверны. –

+0

О, я думаю, что вижу, о чем вы говорите, в своем вопросе он упоминает дважды повторяющиеся данные json_encodeded ... –