2011-11-18 44 views
0

我有一個ajax調用返回HTML中的結果。如果請求是好的,它將返回HTML中的聯繫人列表;否則它應該返回驗證錯誤。兩種情況都會返回HTML。如何區分HTML中的ajax結果

問題是這樣的:如果對服務器的請求成功,我無法判斷結果是驗證錯誤還是聯繫人列表。我需要知道,這樣我就可以相應地操縱我的HTML:

 $.ajax({ 
      type: 'POST', 
      [snip] 
      success: function(response) { 
       // here I need to tell if there was a validation error 
       // or the request succeeded 
      } 

例如,HTML有一個良好的請求可能看起來像......

<tbody> 
    <tr> 
     <td>@contact-name</td> 
    <tr> 
</tbody> 

雖然錯誤請求看起來像...

<ul> 
    <li>Please fix some error</li> 
</ul> 

我在不同的位置顯示結果,因此需要區分可能的結果。

回答

1

如果你不想要移動到JSON,你不希望使用不同的狀態碼,給你的標記,你可以區分基於第一元素的標記名稱:

success: function(response) { 
    var elements = $(response); 
    if (elements[0].tagName.toUpperCase() === "UL") { 
     // ...bad response... 
    } 
    else { 
     // ...good response... 
    } 

    // Display it either way (in our case, we just append, but you'll probably 
    // put them in different places) 
    elements.appendTo(document.body); 
} 

或者就此而言,在開始時包含一個虛擬元素,您始終刪除,其中包含結果(例如,​​與<div class='bad'></div>)。

2

你可以用json編碼你的響應,並用一個代碼告訴你的請求是否成功。

+0

我可以,但我希望避免JSON,因爲在我的特殊情況下,在後端做這件事會很痛苦。 – Mohamad

+0

另一個解決方案是搜索你的HTML響應中的某個關鍵字,如「error」:response.indexOf('error')!== -1 –

+0

這只是一個雖然,但也許你可以發回你的迴應一個自定義的http頭,類似「ajax-request-success:1」或類似的東西。 – Cyclonecode

1

這裏有一個想法:

如果返回一個JSON對象與成功標誌,和你的HTML內容,可以知道在哪裏把HTML。

的JSON會是這個樣子:

{ 
    success: true, 
    html: "<ul><li>Html here</li></ul>" 
} 
1

正確的語義的方式做這將是與HTTP標頭。如果錯誤是未找到聯繫人,請發出404 Not Found狀態代碼。這將觸發error處理程序而不是success處理程序,因此您可以區分並運行不同的代碼。

+0

「狀態碼」,而不是「標題」。 –

+0

嗯,這是一個驗證錯誤,所以它不完全是一個404 ...這讓我有點困惑。 – Mohamad

1

您可以讓服務器返回狀態文本中問題性質的自定義2xx狀態碼。

由於驗證響應是成功的響應,因此您希望使用200系列代碼,並使用自定義狀態代碼可以區分來自所有其他潛在響應的響應類型。