2013-02-15 113 views
0

我使用jQuery構建了一個簡單但工作正常的AJAX表單。表單在提交之前用jQuery驗證,然後用PHP再次成功提交。將數據從PHP發送到jQuery

唯一的問題是錯誤處理。當PHP檢查返回所有字段都沒問題時,我會顯示一條成功消息。如果出現錯誤,我只會顯示「出現錯誤」。
如何從PHP發回數據到jQuery,這樣無效的字段可以被標記爲無效?

或者這種形式的錯誤處理是不必要的,因爲動態突出顯示需要打開JavaScript並且如果打開JavaScript,表單不能被提交錯誤?

基本上,我的有效支票看起來像這樣(簡化當然):

function checkSomething($something) { 

     $valid = true; 

     if (strlen($something) === 0) { 
      $valid = false; 
     } 


     return $valid; 
} 

在腳本的末尾,我不喜歡這樣寫道:

if (checkSomething($something) && checkThis($this) && checkThat($that)) { 
    echo "success"; 
} else { 
    echo "error"; 
} 

而且在我的JavaScript/jQuery代碼它看起來像這樣:

$.ajax({ 
    url: "form.php", 
    type: "POST", 
    data: string, 
     success: function (result) { 
      if (result == "success") { 
       alert("success");      
      } else { 
       alert("error"); 
      } 
     } 
}); 
+0

你需要從PHP回顯更多東西,告訴你什麼失敗了,然後用JS處理這個響應,以顯示任何適合的消息。發佈一些代碼並告訴我們你現在是如何設置的,並且它會更容易幫助。 – adeneo 2013-02-15 20:24:46

+0

如果你有jQuery驗證並啓用了JS,那麼你的PHP驗證可能永遠不會發揮作用(它只是爲了預防措施)。換句話說,如果您的客戶端驗證正在工作,那麼您的服務器端驗證將不會有任何消息發回。如果您的客戶端驗證被禁用或繞過,那麼您的服務器端驗證將接管。如果客戶端的JS被禁用,那麼無論如何你都不能通過jQuery發回任何消息。也顯示代碼。 – Sparky 2013-02-15 20:28:39

+0

他應該仍然返回一個JSON響應。如果它被繞過,那並不意味着Javascript被禁用。即使它是,它應該返回JSON響應,如果Javascript被禁用,它將在瀏覽器中顯示爲文本。 – crush 2013-02-15 20:36:36

回答

1

您的表單提交有3個步驟:JavaScript驗證&提交,PHP的驗證/處理和JavaScript上完成(「所以無效字段可以被標記爲無效」)

這聽起來像你第1步完成,大多數步驟2.

在你的PHP代碼中,你應該有一些數據結構,最好是一個數組,它保存哪些值是無效的。您可以通過它echo`ng到瀏覽器

<?php 
... 
... 
if(count($invalidFieldArray)){ 
    echo json_encode(array('status' => 'Fail', 
          'data' => $invalidFieldArray)); 
}else{ 
    echo json_encode('status' => 'Success'); 
} 

上面的代碼將返回成功/失敗,以你的JavaScript形式的這些數據返回給瀏覽器。

我個人使用jQuery form plugin來處理表單提交,我建議你試試看。它有許多很棒的開箱功能。

$.ajax({ 
    url: "form.php", 
    type: "POST", 
    data: string, 
    dataType: json, 
     success: function (result) { 
      if (result.status === "Success") { 
       alert("success");      
      } elseif (result.status === 'Fail'){ 
       for (field in result.data) { 
         /* Invalid field handling */ 
         ... 
       } 
      } 
     } 
}); 

提示:稍微偏離主題,但在JavaScript中使用比較時,總是使用三聯等於(===),雙等號(= =)是不是在JavaScript作爲其他語言一樣; JavaScript確實用double equals類型強制執行,這會導致不一致的結果。

+0

很酷,謝謝!我相信我終於明白了這是如何工作的。但是,我仍然遇到一個PHP錯誤:「解析錯誤:語法錯誤,意外的T_DOUBLE_ARROW」 - 我也嘗試過使用':'而不是'=>'而沒有任何運氣。 $ invalidFieldArray看起來像這樣:'Array([name] =>請輸入一個名字。[email] =>您需要輸入一個電子郵件地址[message] =>請輸入一條信息。正在發生還是現在太複雜了? – Sven 2013-02-16 00:59:40

+0

不知道那裏發生了什麼,現在它工作:) – Sven 2013-02-16 10:46:19

0

可能發送來自PHP的數據並將其存儲在URL中,像這樣url.com/#value=1

1

我認爲你應該只有一個PHP服務。您從表單發送數據,如果有任何無效數據,您可能想要返回一個JSON指示哪些字段錯誤,以便您可以解析並顯示它。如果一切順利,您只需簡單地顯示該成功消息。

雖然我不確定是否有問題。

+0

這是兩個建議中最好的。返回帶有字段的JSON,以及您希望顯示的每個字段的錯誤消息。 – crush 2013-02-15 20:34:07