2011-07-15 137 views
1

我們的Web應用程序將作爲具有SSO的系統的一部分進行部署。會話超時後,我的XmlHttpRequests被重定向到一個登錄頁面,我們無法控制這個。Javascript:檢查文本是否爲有效的完整HTML文檔

在每個AJAX響應處理程序上,我必須檢查響應文本是否爲完整的HTML頁面。 (HTML片段和JSON是有效的響應。)

我必須承認我對客戶端技術很陌生。我趕上完整的HTML頁面,如下所示:

if (data.search(/<html>/) > -1) { ... } 

我認爲這是可怕的效率低下,依賴於我們的約定,並可能在未來引入微妙的錯誤。 特別是考慮到有一個完整的網頁瀏覽器,其主要目的是解析HTML ...

請分享更優雅的解決方案,以識別文本爲完整的HTML文檔!

(jQuery是已經在項目中使用。)

閉幕編輯:

我在有點鹹菜中選擇一個答案接受,因爲該解決方案似乎是一個複合從評論的二加思路:

我會爲JSON和HTML片段單獨驗證:

  • 在哪裏我期待JSON,響應必須成爲JSON。

  • 在我期待HTML片段(而不是完整文檔)的情況下,響應必須以結束標記(忽略空白)結束,但不能(不區分大小寫)。 SSO登錄頁面必須結束,我們將記錄此「限制」。

感謝大家的貢獻!

+1

的''開始標記是可選的,不區分大小寫,並且可以具有屬性(如果存在)。 – Quentin

+0

澄清:我期待的AJAX片段和JSON將不包含,,標記,但在更常見的情況下(沒有超時,預期的響應),搜索這些代碼似乎很昂貴。 – Szocske

+0

您可以始終將您的服務器 - 在發生超時時,HTTP代碼會爲HTTP響應添加一個特殊的頭文件。我就是做這個的。然後,客戶端XHR代碼可以查找該頭文件;如果它在那裏,它知道有一個超時,可以重定向自己。 – Pointy

回答

1

如果你想檢查響應是否是一個完整的HTML頁面,你可能想開始看最後,不是嗎?檢查</html>是否最終不會浪費太多性能。如果你不想要,請說明你的意思是完整的HTML頁面。

+0

是的,向後搜索結束標籤也可以!它在大多數瀏覽器中更高效嗎? – Szocske

+0

也許..因爲它可能是您收到的最後一個標籤,所以這樣做效率會很高:) – duedl0r

1

你可以在你的響應中使用parseJson()。如果返回的對象,這是一個JSON,否則這是一個HTML片段

responsetrial = $.parseJson(response); 

if(typeof reponsetrial ==='object'){ 
//it's json 
}else{ 
//it's html 
+0

HTML片段和JSON都很好,包含,,等的完整HTML文檔不是。 – Szocske

+0

如果這是一個JSON你很好,如果它不是其他任何東西,它不會正確評估,你也很好,我想。是的,你不知道它是不是JSON,但你可以確定你可以確定它是Json還是其他的東西 –