2014-12-02 4 views
0

Я собираю ошибки из файла php с помощью ajax, и я сталкиваюсь с несколькими проблемами. Как и в php-файле, я беру ошибки в $ email_error и $ password_error, поэтому я хочу вернуть отчеты об ошибках в ajax и назначить $ email_error id = "email_errors" и $ password_error для id = "password_errors". Может быть, кто-то может объяснить, как я определяю, какие переменные я хочу вернуть, и какой идентификатор должен принять. Я оставлю код с комментариями ниже. Благодаря!jQuery Ajax возвращает несколько значений из php

PHP

<?php 


if (isset($_POST['email']) && isset($_POST['password1']) && isset($_POST['password2'])) { 

$email = trim ($_POST['email']); 
$password1 = trim ($_POST['password1']); 
$password2 = trim ($_POST['password2']); 

} 

$email_error = 'No errors<br>'; 
$password_error = 'No errors<br>'; 

if (empty($email)) 
$email_error = ('Pleas fill in email field<br>'); 

if ($email == 'example') 
$email_error =('There already is user with this email<br>'); 

if (empty($password1)) 
$password_error = ('Please fill in password fields<br>'); 

if (empty($password2)) 
$password_error = ('Please fill in password fields<br>'); 

$email_error; //this variable must be returned to ajax and assigned to id "email_errors" 
$password_error; //this variable must be returned to ajax and assigned to id "password_errors" 

?> 

Javascript

$(document).ready(function() { 

$('#push_button').click(function() { 

$.post('php.php', 
{ 
email : $('#email').val(), // i take these variables to php 
password1 : $('#password1').val(), 
password1 : $('#password2').val() 
} , 
function (data) { //what do i return here? 

$('#email_errors').val(data); //how to assign $emaill_error to #email_errors 
$('#password_errors').val(data); //how to assign $password_error to #password_errors 

} 
) 
}) 


}) 
+0

Используйте соответствующую структуру данных и JSON или какой-либо другой простой в разбора формат сериализация его. – Bergi

ответ

1

Если вы хотите вернуть несколько переменного Аякс, вы должны вернуть некоторые JSon

PHP:

// .. your php code 
$ret = array("email_error" => $email_error, "password_error" => $password_error); 
echo json_encode($ret); 

Будьте осторожны, json_encode нуждается в PHP> = 5.2

JS:

$.ajax({ 
    url: "php.php", 
    type: "POST", 
    dataType: "json", // The type of data that you're expecting back from the server 
    data: { 
    email: $("#email").val(), 
    password1: $("#password1").val(), 
    password2: $("#password2").val() // careful, you had "password1" as variable name 2 times 
    }, 
    success: function(obj) { 
    // obj is your php array, transformed into a js object 
    // you may want to use .html() instead of .val() since your errors are strings with html tags - depends if #email_errors/#password_errors are inputs or divs 
    $("#email_errors").html(obj.email_error); 
    $("#password_errors").html(obj.password_error); 
    } 
}); 
0

В PHP, следующий не будет возвращать ничего:

$email_error; 
$password_error; 

Вы не echo'ing значения или что-нибудь. Если вы хотите передать два различных значения, я бы возвращать объект JSON как так (в PHP):

echo json_encode(array(
    'email_error' => $email_error, 
    'password_error' => $password_error 
)); 

, а затем в JavaScript, ваши данные должны теперь быть объект JavaScript, так как JQuery должен разобрать JSON объект и понимать его как объект. Таким образом, вы будете в состоянии сделать, как это в JavaScript:

$('#email_errors').val(data.email_error); 
$('#password_errors').val(data.password_error); 

Если вы не хотите использовать массив, вы можете создать новый объект, а затем передать этот объект в json_encode.

$obj = new stdClass; 
$obj->email_error = $email_error; 
$obj->password_error = $password_error; 

echo json_encode($obj); 
+0

Нужно ли возвращать массив при использовании json? –

+0

См. Мои правки, есть новый раздел, объясняющий, как использовать объект. – jValdron

2

вернуть значение просто эхо переменной с json_encode() например,

$return_array = new array(); 
$return_array['email_error'] = $email_error; 
$return_array['password_errors'] = $password_errors; 
echo json_encode($return_array); 

в яваскрипте функции (данные) {}:

function (data) { //what do i return here? 

    $('#email_errors').val(data['email_error']); //how to assign $emaill_error to #email_errors 
    $('#password_errors').val(data['password_errors']); //how to assign $password_error to #password_errors 

} 
+0

Вы забыли '' 'переменную' email_error' в вашем PHP-коде, это не сработает. – jValdron

+0

в вопросе там это email_error в php и email_errors в js ... извините, я просто вставляю его в – x1x

+0

Да, я не копировал его вставить и, следовательно, сделал ошибку в моем ответе :) Извините. – jValdron

Смежные вопросы