一般處理Ajax 回應時會傳送的資訊種類有:資料、成功資訊、錯誤資訊、失敗資訊以及處理狀態,傳遞的資訊種類並不一致,再加上除了資料之外,通常還希望能傳遞處理狀態,這種情況大部分會選擇是以JSON 的方式傳遞這兩個資訊,以下是常見的幾種格式:
但以執行狀態跟操作行為作一個歸納,可以區分以下幾種傳遞結果:
{ code: 1, msg: "OK" } { success: true , result: "data" , errorMsg: "" } { status: 'success' , result: [], errorMsg: "" } //...
但以執行狀態跟操作行為作一個歸納,可以區分以下幾種回傳結果:
資料操作 HTTP Method 成功 錯誤/失敗
讀取(Read) GET 資料 錯誤/失敗資訊
新增 (Create) POST 成功資訊 錯誤/失敗資訊
修改 (Update)
刪除 (Delete)
從上面的歸納可以看出規律性,接著只要有方法可以傳送處理的狀態,以及能夠區分資料的種類,其實就單純很多,而HTTP Status Codes 就是用來傳遞HTTP 的處理狀態,如果利用這個方式來傳遞自訂的處理狀態,這樣HTTP Content 就可以很單純傳遞資料,讓資料格式不受限於JSON,還可以使用其他格式(text, xml, html),而且XMLHttpRequest 本身就有處理HTTP Status Codes 的能力,而jQuery.ajax 也有提供error status 的處理,所以可以利用這個來定義狀態的處理,在HTTP Status Codes 有幾個已經定義狀態,很適合用來傳遞處理狀態的資訊:
400Bad Request錯誤的請求適用在表單內容的錯誤,如必填欄位未填、Email 格式錯誤
403Forbidden沒有許可權,被禁止的適用在沒有登入或許可權不足
500Internal Server Error內部伺服器錯誤適用在程式的錯誤
jQuery 接收資訊的範例
代碼如下 |
複製代碼 |
$.ajax({ type: "POST" , url: document.location, success: function (data, textStatus, jqXHR) { alert(data); }, error: function (jqXHR, textStatus, errorThrown) { alert(jqXHR.responseText); } }); |
PHP 傳遞錯誤資訊的範例
代碼如下 |
複製代碼 |
if (php_sapi_name() == 'cgi' ){ header ( "Status: 400 Bad Request" ); } else { header ( "HTTP/1.0 400 Bad Request" ); } exit ( "儲存失敗!!" ); |
C# MVC 傳遞錯誤資訊的範例
代碼如下 |
複製代碼 |
Response.TrySkipIisCustomErrors = true ; Response.StatusCode = 400; return Content( "儲存失敗!!" ); |