2013-04-14 2 views
0

ОбъяснениеJQuery POST ошибки обработки

Я посылаю POST, а в PHP я проверяю, если имя пользователя уже существует в базе данных. Если да, верните ошибку.

Но дело в том, что я не могу использовать тот же function(data), потому что хочу, чтобы ошибка была расположена в другом div.

$.post("events.php?action=send", { data : $(this).serialize() }, function(data) 
{ 
    $("#processing").html(''); 
    $("#comments").html(data); 
}); 

Проблема

Я не могу иметь две переменные в анонимной функции, такие как функции (данные, ошибка), то, как я должен принести «ошибки» PHP напечатанный, например, «User уже существуют в базе данных ", а затем помещают его в div #errors?

+0

Не используйте стенографии, используйте '.ajax' – Jon

+0

В чем разница? –

+0

Какая версия jQuery? Были изменения в том, как это работает в последних версиях. – FakeRainBrigand

ответ

2

Это зависит от того, как вы регулируете ошибку в вашем PHP коде.

Для того, чтобы закончить работу с обработчиком ошибок, вам необходимо установить код состояния HTTP в «5XX».

То, что вы, вероятно, хотите сделать, это сериализовать объект ошибки в случае, если уже существует пользователь, и обработать его в обработчик успеха, как вы делаете сейчас:

PHP:

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json'); 

$data = array('error' => 'something went wrong'); 
echo json_encode($data); 

JS:

function(data){ 

    if(data && data.error){ 
     //there was an error, handle it here 
     console.log(data.error); 
    } else { 
     //do something else with the user 
     console.log(data); 
    } 

} 
+0

Мне это нравится! Uncaught TypeError: не может использовать оператор 'in' для поиска 'error' в 1 –

+0

@JonyKale Вероятно, поскольку данные не определены, попробуйте обновленный код. – Johan

+0

Uncaught TypeError: Невозможно использовать оператор «in» для поиска «ошибки» в heheheh «hehehe» - это то, что внутри «данных». \t \t \t \t \t если (данные && 'ошибка' в данных) \t \t \t \t \t \t \t \t \t \t { \t \t \t \t \t \t $ ("Ошибка").HTML (данные); \t \t \t \t \t} –

0

В PHP вы можете вернуть JSon ошибку, как print '{"error":'.json_encode($error).'}', а затем, в ваших JS положить в желаемом DIV

$.post("events.php?action=send", { data : $(this).serialize() }, function(data) 
{ 
    $("#processing").html(''); 
    $("#comments").html(data); 
    $("#error").append(data.error); 
}); 
0

Я предлагаю вам вернуть данные в формате JSON с tring с вашего сервера. Если вы это сделаете, вы можете получить объект из $ .parseJSON (data);

// In your php code 
$result = new stdClass(); 
$result->userExists=false; 

echo json_encode($result); 

Теперь внутри анонимной функции:

// Javascript 
data = $.parseJSON(data); 
console.log(data); 

if (data.userExists) alert("User exists!"); 
Смежные вопросы