Javascript:检查文本是否是完整的HTML文档

Javascript:检查文本是否是完整的HTML文档,javascript,ajax,optimization,Javascript,Ajax,Optimization,我们的web应用程序将作为带有SSO的系统的一部分进行部署。会话超时后,我的XmlHttpRequests被重定向到登录页面,对此我们没有控制权 在每个AJAX响应处理程序上,我必须检查响应文本是否是完整的HTML页面。(HTML片段和JSON是有效的响应。) 我必须承认,我对客户端技术相当陌生。我捕获完整的HTML页面,如下所示: if (data.search(/<html>/) > -1) { ... } if(data.search(//)>-1){…} 我认为这是

我们的web应用程序将作为带有SSO的系统的一部分进行部署。会话超时后,我的XmlHttpRequests被重定向到登录页面,对此我们没有控制权

在每个AJAX响应处理程序上,我必须检查响应文本是否是完整的HTML页面。(HTML片段和JSON是有效的响应。)

我必须承认,我对客户端技术相当陌生。我捕获完整的HTML页面,如下所示:

if (data.search(/<html>/) > -1) { ... }
if(data.search(//)>-1){…}
我认为这是非常低效的,依赖于我们的约定,并且可能在将来引入微妙的bug。 特别是考虑到有一个完整的网页浏览器,其主要目的是解析HTML

请分享更多优雅的解决方案,将文本识别为完整的HTML文档

(JQuery已在项目中使用。)

结束编辑:

我在选择一个答案时有点为难,因为解决方案似乎是评论中两个以上想法的组合:

我将为JSON和HTML片段提供单独的验证器:

  • 在我期待JSON的地方,响应必须是JSON

  • 在我期望的HTML片段(而不是完整的文档)中,响应必须以结束标记结尾(忽略空格),但不能(不区分大小写)。SSO登录页面必须以结尾,我们将记录此“限制”


谢谢大家的贡献

如果您想检查响应是否是完整的HTML页面,您可能希望从末尾开始查看,不是吗?检查
是否在末尾不会浪费太多性能。如果您不想这样做,请澄清完整HTML页面的含义。

您可以在响应中使用parseJson()。如果它返回一个对象,它就是一个json,否则它就是一个html片段

responsetrial = $.parseJson(response);

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

是的,向后搜索结束标记也可以!在大多数浏览器中它是否更有效?也许。。因为它可能是您收到的最后一个标记,所以这样做会很有效:)开始标记是可选的,不区分大小写,如果存在,可能会有属性。说明:我期望的AJAX片段和JSON不会包含标记,但在更常见的情况下搜索这些标记似乎很昂贵(无超时,预期响应。)当出现超时时,您可以让服务器端代码在HTTP响应中添加一个特殊的头。我就是这么做的。然后客户端XHR代码可以只查找该头;如果有,它知道有超时,并可以重定向自身。HTML片段和JSON可以,包含、、等的完整HTML文档则可以。如果是一个json你很好,如果它是json以外的任何东西,它将无法正确计算,我认为你也很好。是的,如果它不是json,你不知道它是什么,但你可以确定它是json还是其他东西