我有一个应用程序,其中大多数请求是通过AJAX提交的,尽管有些是通过“常规”提交的。 HTTP请求。如果提交了请求并且用户的会话超时,则返回以下JSON:

{"authentication":"required"}

提交所有AJAX请求的JavaScript函数通过显示弹出消息并将用户重定向回登录页面来处理此响应。

然而,当非AJAX请求收到此响应时,JSON只是在浏览器中显示,因为响应由浏览器直接处理(即绕过上述JavaScript函数)。显然这并不理想,我希望接收此响应的非AJAX请求与AJAX请求的行为相同。为了实现这一目标,我可以考虑两个选项:

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

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

  3. 如果有人知道我是如何实现我在(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)阅读'Accept'请求HTTP标题。

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

e.g。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top