2008-11-14 59 views
0

我正在使用jQuery向遠程端點發出AJAX請求。如果發生故障並且該對象將描述失敗,那麼該端點將返回JSON對象。如果請求成功,它將返回HTML或XML。

我看到如何在jQuery中定義預期的請求類型,作爲$.ajax()調用的一部分。有沒有辦法在success處理程序中檢測請求類型?

$.ajax(
    { 
     type: "DELETE", 
     url: "/SomeEndpoint", 
     //dataType: "html", 
     data: 
      { 
       "Param2": param0val, 
       "Param1": param1val 
      }, 
     success: function(data) { 
       //data could be JSON or XML/HTML 
      }, 
     error: function(res, textStatus, errorThrown) { 
       alert('failed... :('); 
      } 
    } 
); 

回答

4

你的應用程序是否生成了正確的Content-Type頭文件(application/json,text/xml等)並在成功回調中處理了這些頭文件。也許這樣的事情會起作用?

xhr = $.ajax(
    { 
     //SNIP 
     success: function(data) { 
       var ct = xhr.getResponseHeader('Content-Type'); 
       if (ct == 'application/json') { 
        //deserialize as JSON and continue 
       } else if (ct == 'text/xml') { 
        //deserialize as XML and continue 
       } 
      }, 
     //SNIP 
); 

未經測試,但它是值得一試。

+0

儘管Owen的回答是合適的,但完整的回調不會獲取數據,因此您必須使用類似的模式(在方法範圍之外存儲數據...過程完整)。我採用這種方法,因爲我認爲它更清潔。 – 2008-11-15 03:03:40

0

當它調用您的成功處理程序時,數據已經爲您反序列化。您需要始終爲任何成功的結果返回相同的數據類型。如果確實存在錯誤,則應該拋出一個異常,並讓它由錯誤回調來處理。這應該能夠解析所產生的錯誤並將其包裝爲您的回調,也就是說,它會檢測到響應沒有200 OK狀態並解析結果以獲取錯誤信息。

+0

我有一種方法在某些情況下返回JSON,而在其他情況下返回HTML。它返回錯誤的JSON描述的原因是因爲它是一個描述所有服務器端數據驗證錯誤的對象。這似乎是適當的模式使用。不同意? – 2008-11-15 03:04:46

3

如何使用complete選項?

$.ajax({ 
    ... 

    complete : function(xhr, status) { 
    // status is either "success" or "error" 
    // complete is fired after success or error functions 
    // xhr is the xhr object itself 

     var header = xhr.getResponseHeader('Content-Type'); 
    }, 

    ... 
}); 
+0

是的,這比我所建議的還要好。 – dowski 2008-11-14 21:56:44

相關問題