2011-07-15 76 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还是其他的东西 –