2008-10-31 58 views
3

我有一个应用程序,其中大多数请求通过AJAX提交,但有些通过“常规”HTTP请求提交。如果请求被提交,用户的会话超时,将返回以下JSON:检测浏览器加载的JSON

{"authentication":"required"} 

JavaScript函数它提交所有的AJAX请求处理通过显示一个弹出消息,将用户重定向到登陆该响应页。然而,当一个非AJAX请求收到这个响应时,由于响应是由浏览器直接处理的(即前面提到的JavaScript函数被绕过),所以JSON只是简单地显示在浏览器中。显然,这并不理想,我希望接收此响应的非AJAX请求的行为与AJAX请求的行为相同。为了实现这一点,我可以想到2个选项:

  1. 浏览应用程序并将所有请求转换为AJAX请求。这会工作,但也可能需要很长时间!

  2. 上面显示的JSON是由一个非常简单的JSP生成的。我想知道是否可以将JavaScript事件处理程序添加到该内容在浏览器中显示之前运行的JSP中 - 我假设这永远不会被AJAX请求调用?该处理程序可以调用显示弹出窗口并执行重定向的其他JavaScript代码。

如果有谁知道我究竟是如何能实现我在(2)中列出的处理程序,或者有其他可能的解决方案,我会很感激,如果他们愿意把它们。

干杯, 唐

回答

1

不能在处理程序添加到JSP的方式。您添加的任何内容都将使其成为非JSON生成页面。

我可以看到两个选项: 通过将URL参数附加到修改输出的屏幕上来向页面添加参数。

网址:http://domain/page.jsp?ajaxRequest=true 将输出JSON只有

网址:http://domain/page.jsp 会显示一个JSP页面,可以转发到另一个页面。

OR

变化的响应具有在JSP转发代码将通过Web浏览器,如果它是直接命中得到执行。然后让你的AJAX调用去掉转发代码,然后处理剩下的东西。

3

3)改变你的AJAX代码,添加一个变量的GET或POST:outputJson=1

0

4)阅读'接受'请求HTTP头。

然后,在服务器端定制输出:

例如,

if(Accept contains application/json...) { // client asking for json, likely to be XHR 
    return {"foo":"bar"} 
} else { // other 
    return "Location: /login-please"; 
} 
0

开始使用更智能的错误信息,如:

{"error":"authentication required"} 

裹在回调的JSON输出:

errorHandler({"error":"authentication required"}); 

有一个处理程序脚本等待:

function errorHandler(r) { 
    alert(r.error); 
} 

而且不要忘记森作为text/javascript而不是application/x-json