2012-01-15 2 views
0

Я использую фреймворк PHP Zend и jQuery ajax для отправки и проверки формы с использованием формата данных json. PHP отлично работает, ajax отлично работает. Единственная проблема заключается в том, что если форма имеет более одного недопустимого ввода (например, имя и адрес электронной почты являются недопустимыми), ajax выполняет функцию error: function().Проверка формы ajax с помощью PHP

Вот код Аякса:

.ajax({ 
     type:'POST', 
     url:'processForm.php', 
     dataType:'json', 
     data:str, 
     success:function(data){ 
      //do something when ajax call is complete 
      //setup variables 
      switch (data.internal_code){ 
      case 0: 

       $('#NameError').html(data.msg0); 

      break; 

      case 1: 

       $('#EmailError').html(data.msg1); 

      break; 

      case 2:   
       $('#TextError').html(data.msg2); 


      break; 

      case 3: 
       $('#contactForm').fadeOut(2000); 
       $('#successMessage').fadeIn(2000); 
       $('#successMessage').fadeOut(4000); 

       break; 
      } 

     }, 

     error:function(data){ 

      alert ("ajax did not work"); 

     } 

Пожалуйста, дайте мне знать, как я могу исправить эту ошибку.

ответ

0

вам нужно посмотреть, что находится в обратном вызове error и определить, что происходит. Или, альтернативно, откройте инспектор webkit или firebug и посмотрите, что возвращается с сервера.

Если ваш запрос работает с допустимым вводом или вводом с 1 ошибкой, и вы получаете обратный вызов ошибки для 2 недопустимых входов, я уверен, что сервер терпит крах и возвращает 500. Не глядя на ответ с вашего сервера, его невозможно чтобы помочь больше.

+0

Я сделал это, и это то, что сервер отправляет обратно, который является правильным для двух недопустимого ввода. {"code": 200, "msg0": "No numbers", "internal_code": 0} {"code": 200, msg1 ":" Valid email please "," internal_code ": 1} – user843681

0

Вы не можете использовать оператор switch для проверки нескольких форм, потому что результат - это только один набор действий.

Обычный способ сделать это явно кодировать JSON на сервере, чтобы дать более значимый результат:

if(data.internal_code_0){ 
    // do something 
    error++; 
};  

if(data.internal_code_1){ 
    // do something else 
    error++; 
}; 

// then at the end of the field processing 

if(error == 0) { 
    // reset form field states and button states 
    // no need to submit form again - it has already been done! 
}; 

Вы видите здесь я использую явный data.internal_code_0 это на самом деле не важно, что это значение содержит, скорее, то, что он либо установлен, либо нет, и поэтому я могу иметь дело с несколькими ошибками на стороне клиента, используя ìf s.

Также я подсчитываю количество ошибок, так что в конце обработки я знаю, прошли ли все поля или нет.

На стороне PHP это сделать

if(!isset($_POST['inputFieldHTMLName'])) 
{ 
    // do something 
} 
else 
{ 
$errors['internal_code_0'] = 'you forgot to enter a value '; 
}; 

// ... check other fields 

if (count($errors, 1)>0) 
{ 
echo json_encode($errors); 
} 
else 
{ 
    // form is good. Continue with processing 

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