2012-09-20 73 views
1

這有3個要素。PHP和AJAX:如何發送/處理錯誤響應?

  • HTML表單
  • 它發送表單值和接收並解析來自PHP腳本響應的AJAX連接
  • PHP腳本這決定的值是否好/壞或不併發送回一個適當的響應(可能在XML格式,便於解析由javascript函數?)

當PHP查看並處理髮送的數據,其插入到數據庫或做什麼用的,它需要發回迴應或者可能是一系列迴應,以至於javascript可以向用戶顯示適當的錯誤消息。也許還可以在輸入錯誤的元素周圍放置紅色邊框。

這通常是怎麼做的,兩端?我在想,PHP應該只發回簡單的數字錯誤代碼,JavaScript會在不同的div中設置適當的文本錯誤消息。但我並不確定,而且我不確定我應該用Google來尋找答案。

(順便說一句,我不是在談論HTTP錯誤代碼)

+0

如果你使用jQuery,看看http://api.jquery.com/jQuery.get/一些有關AJAX請求和處理響應的更多信息。 –

+0

你的方法非常好。定義PHP和JavaScript之間共享的錯誤代碼,並在客戶端呈現文本消息。簡單而有效。 – aefxx

+0

我可以補充:你應該把你的答案包裝在一個JSON對象中,這將大大簡化進一步處理。 – aefxx

回答

1

你在問什麼叫做驗證。
有服務器端驗證和客戶端驗證。

第一個是最重要的一個,因爲您不希望用戶損壞您的數據庫。 第二對您的客戶很重要。因爲它可以迅速回應任何與表單無關的內容(紅色邊框)。

如果要驗證表單客戶端,通常使用Javascript完成。 對於服務器端驗證,我將使用JSON作爲服務器和客戶端之間的通信,因爲php和javascript都知道如何處理它。

爲PHP:
http://php.net/manual/en/function.json-encode.php
http://php.net/manual/en/function.json-decode.php

的JS。 剛剛訪問結果參數:

success: function(response){ 
     var json = $.parseJSON(response.responseText); 
    } 
2

使用這個jQuery AJAX功能發佈數據,PHP文件
然後做什麼用的數據(在數據庫發送或做一些集合),然後回聲結果你會在成功部分捕捉到。
然後把你的結果放在div或你想要的位置。

$.ajax({   
      type: "POST", 
      url:"scripts/dummy.php", 
      data:"dummyData="+dummyData, 

      beforeSend: function() 
      {     

      }, 
      success: function(resp) 
      {    
       $("#resultDiv").html(resp); 
      }, 

      complete: function() 
      { 

      }, 

      error: function(e) 
      { 
      alert('Error: ' + e); 
      } 

    }); //end Ajax 
1

舉例阿賈克斯接觸形式:(最初的荷蘭語和它有點老編碼錯誤)

請記住,你需要的jQuery的這個例子。只是從他們的網站下載的jquery.js,它在你的HTML

form.html

<form id="frm_contact" name="contactformulier"> 
<label>Naam<span style="color:red">*</span></label><br/> 
<input type="text" size="15" maxlength="50" name="naam" /> 
<br/><br/> 

<label>Bedrijf</label><br/> 
<input type="text" size="15" maxlength="50" name="bedrijf" /> 
<br/><br/> 

<label>Email<span style="color:red">*</span></label><br/> 
<input type="text" size="15" maxlength="50" name="tmail" /> 
<br/><br/> 

<label>Bericht<span style="color:red">*</span></label><br/> 
<textarea name="tekst"> 
</textarea> 
<br/><br/> 
(<span style="color:red">*</span>) Required fields! 
<br/><br/> 
<div id="subbutton">Send</div> 
</form> 
<div id="error-msg"></div> 

形式添加到您的腳本。HTML(javascript代碼)

<script> 
$(document).ready(function(){ 
var err=""; 
$("#subbut").click(function(){ 
$.post("PHP/ajax_contact.php", $("#frm_contact").serialize(), 
function(data){ 
switch(data){ 
case '0': 
err="<span><center>Thanks for contacting us!</center></span>"; 
$("#frm_contact").hide(); 
break; 
case '1': 
err="Invalid email!"; 
break; 
case '2': 
err="Fill in all fields please!"; 
break; 
case '3': 
err="Error sending this mail."; 
break; 
default: 
err="<center>Mail server is offline.</center>"; //Or whatever error 
$("#frm_contact").hide(); 
} 
$("#error-msg").html("<br/>"+err+"<br/>"); 
}); 
}); 
}); 
</script> 

PHP/ajax_contact.php

<?php 

function check_email_address($email) { 
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) { 
    return true; 
} 
return false; 
} 

$naam = trim($_POST['naam']); 
$bedrijf = trim($_POST['bedrijf']); 
$tmail = trim($_POST['tmail']); 
$tekst = trim($_POST['tekst']); 
if(isset($naam) && isset($tmail) && isset($tekst)){ 
    if(!empty($naam) && !empty($tmail) && !empty($tekst)){ 
     if(check_email_address($tmail)){ 
      $to  = '[email protected]'; 
      $subject = 'Some subject'; 
      $message = 'Name: '.$naam.' //// Company: '.$bedrijf.' 
------------------------------------------------------- 
'.$tekst.' 
------------------------------------------------------- 
Sended on: '.date("F j, Y, g:i a").' - from: www.somthing.com'; 
      $headers = 'From: '. $tmail . "\r\n" . 
       'Reply-To: '. $tmail . "\r\n" . 
       'X-Mailer: PHP/' . phpversion(); 

      mail($to, $subject, $message, $headers); 
      echo '0'; //Succes <3 
     }else{ 
      echo '1'; //Invalid mail adres 
     } 
    }else{ 
     echo '2'; //Empty fields 
    } 
}else{ 
    echo '3'; //Fail post 
} 

?>