2012-01-15 173 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 

};