在一次回顾原生ajax获取后台数据时遇到了如下问题:
后台servlet使用了重定向将前端页面ajax传过来的值做了一个判断,然后返回结果给前端去弹框显示,如下代码:
response.getWriter.print();
response.sendRedict("index.html");
前端接收主要代码:
var msg = xhr.responseText;
alert(msg);
然后弹窗直接显示的是一块HTML的代码,后来把重定向代码注释后,显示的才是msg的内容,之后又把response.getWriter.print();进行注释(重定向未注释),发现弹窗是代码片段,所以认为重定向返回的是一个页面并且会覆盖,又想了一下感觉不严谨,如果是 response.getWriter.print()**;和response.sendRedict(“index.html”);
这两行返回的数据间隔太短,所以导致前端接收的太快才认为是重定向的数据覆盖,所以servlet改了一下代码
response.getWriter().print(msg);
Thread th = new Thread();
th.run();
try {
th.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.sendRedirect("index.html");
让程序在两行代码卡5秒看会不会看到两个弹窗,结果就是没有msg的弹窗,等5秒后才有代码段的弹窗,那么是不是*response.getWriter().print(),*返回的数据是跟随重定向的页面而去返回的呢!?但是开头就试验过没有重定向,他也能回传数据,所以创建了一个新的test.html页面,运行的时候发现重定向功能居然没执行!
天哪! servlet的重定向居然没有执行,然后上网查了一下,别人也有这样的问题(此处可上网搜索 关键词“ajax会不会重定向”)原来ajax只会做获取数据的工作,其他请求一概无视
想到这里,就是重定向返回的代码片段把上面一行的msg的数据覆盖了,所以如果在重定向后面再加一个返回msg那是不是就能返回msg了
结果最终返回的还是代码段,把代码段注释,又加了几个response.getWriter().print(),都能返回但是只要有重定向,重定向后面的数据好像返回不了
总结:ajax只做获取返回数据的工作,不会处理其他的请求