2012-01-15 166 views
0

我用PHP Zend框架和jQuery ajax用json数据格式提交和验证表单。 PHP的工作很好,Ajax也很棒。唯一的问题是,如果表单有多个无效输入(例如,名称和电子邮件都无效),则ajax会执行error:function()部分。用PHP验证ajax表单验证

下面是Ajax代码:

.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 inspector或firebug并查看服务器返回的内容。

如果您的请求适用于有效输入或输入1错误,并且您收到2个无效输入的错误回调,我敢打赌服务器正在崩溃并返回一个500.没有查看服务器的响应,帮助更多。

+0

我做到了,这就是服务器发回,这是两个无效输入正确。 {“code”:200,“msg0”:“无号码”,“internal_code”:0} {“code”:200,“msg1”:“请发送有效email”,“internal_code”:1} – user843681 2012-01-15 22:20:02

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 

};