检测浏览器加载的JSON
我有一个应用程序,其中大多数请求通过AJAX提交,但有些通过“常规”HTTP请求提交。如果请求被提交,用户的会话超时,将返回以下JSON:检测浏览器加载的JSON
{"authentication":"required"}
JavaScript函数它提交所有的AJAX请求处理通过显示一个弹出消息,将用户重定向到登陆该响应页。然而,当一个非AJAX请求收到这个响应时,由于响应是由浏览器直接处理的(即前面提到的JavaScript函数被绕过),所以JSON只是简单地显示在浏览器中。显然,这并不理想,我希望接收此响应的非AJAX请求的行为与AJAX请求的行为相同。为了实现这一点,我可以想到2个选项:
浏览应用程序并将所有请求转换为AJAX请求。这会工作,但也可能需要很长时间!
上面显示的JSON是由一个非常简单的JSP生成的。我想知道是否可以将JavaScript事件处理程序添加到该内容在浏览器中显示之前运行的JSP中 - 我假设这永远不会被AJAX请求调用?该处理程序可以调用显示弹出窗口并执行重定向的其他JavaScript代码。
如果有谁知道我究竟是如何能实现我在(2)中列出的处理程序,或者有其他可能的解决方案,我会很感激,如果他们愿意把它们。
干杯, 唐
不能在处理程序添加到JSP的方式。您添加的任何内容都将使其成为非JSON生成页面。
我可以看到两个选项: 通过将URL参数附加到修改输出的屏幕上来向页面添加参数。
网址:http://domain/page.jsp?ajaxRequest=true 将输出JSON只有
网址:http://domain/page.jsp 会显示一个JSP页面,可以转发到另一个页面。
OR
变化的响应具有在JSP转发代码将通过Web浏览器,如果它是直接命中得到执行。然后让你的AJAX调用去掉转发代码,然后处理剩下的东西。
3)改变你的AJAX代码,添加一个变量的GET或POST:outputJson=1
4)阅读'接受'请求HTTP头。
然后,在服务器端定制输出:
例如,
if(Accept contains application/json...) { // client asking for json, likely to be XHR
return {"foo":"bar"}
} else { // other
return "Location: /login-please";
}
开始使用更智能的错误信息,如:
{"error":"authentication required"}
裹在回调的JSON输出:
errorHandler({"error":"authentication required"});
有一个处理程序脚本等待:
function errorHandler(r) {
alert(r.error);
}
而且不要忘记森作为text/javascript
而不是application/x-json
。