您现在的位置:天新网 > 软件开发 > .Net开发 > ASP.NET
ExtAspNet应用技巧(三) - 302与Asp.Net Ajax
2009年08月26日 博客园 三生石上
第二次是重定向的登录页面。
这就使我想起了以前使用 Response.Redirect 的错误,和这个一模一样。以前我们的解决办法是告诉大家,以后不要使用Response.Redirect了,
使用我们ExtASPNet提供的方法 PageContext.Redirect ,但是现在似乎绕不过去了,有理由相信 ASP.NET 的Form Authentication内部调用了
Response.Redirect 函数,我们可能去修改Asp.net的实现吧。
另辟蹊径:
既然绕不过 302 Found 的响应,我们何不来支持它,不过诡异的是在ExtAspNet的AJAX请求代码中:
Ext.Ajax.request({
url: document.location.href,
params: serializeForm(theForm.id),
success: _ajaxSuccess,
failure: _ajaxFailure
});
两次的HTTP请求变成了一次,并且在回调函数(_ajaxSuccess)中观察状态码是 200, 而不是 302。
无奈之下只好借助网络,发现了下面一篇文章:
?t=30278
最终的结论居然是:
Unfortunately basex can't handle 302 as the browser preempts it.
Bottom line - redirects considered harmful with ExtJS and other AJAX Frameworks.
上面一句话的重点在 Preempt 单词上,我特地查了一下这个单词的意思是“vt. 优先购买(先取)”,看来 302 响应是被
浏览器无情的劫持了,XMLHTTPREQUEST看到的是一个完整的HTTP请求响应。
看来客户端无法解决这个问题。
峰回路转:
服务器端总能有办法吧,我们可以在响应流中捕获 302 ,然后进行一定的处理再输出到浏览器。
上一篇: ExtAspNet应用技巧(八) - log4net配置与使用
相关内容