通过Ajax的post传递的数据传到servlet中是不能在转发重定向的
AJAX其实就是异步的js和xml
通过ajax可以在浏览器中发送异步请求。
最大优势:无刷新获取数据
优点:
1.可以无需刷新页面与服务器进行通信
2.允许根据用户事件更新部分页面内容
缺点:跨域问题
跨域问题来源于JavaScript的"同源策略",即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的,html本身没有跨域问题
跨域问题怎么解决?
1、响应头添加Header允许访问
跨域资源共享(CORS)Cross-Origin Resource Sharing
这个跨域访问的解决方案的安全基础是基于"JavaScript无法控制该HTTP头"
它需要通过目标域返回的HTTP头来授权是否允许跨域访问。
2、jsonp 只支持get请求不支持post请求
用法:
①dataType改为jsonp
②jsonp : “jsonpCallback”————发送到后端实际为http://a.a.com/a/FromServlet?userName=644064&jsonpCallback=jQueryxxx
③后端获取get请求中的jsonpCallback
④构造回调结构
3、httpClient内部转发
若想在B站点中通过Ajax访问A站点获取结果,固然有ajax跨域问题,但在B站点中访问B站点获取结果,不存在跨域问题,这种方式实际上是在B站点中ajax请求访问B站点的HttpClient,再通过HttpClient转发请求获取A站点的数据结果。但这种方式产生了两次请求,效率低,但内部请求,抓包工具无法分析,安全。
4、使用接口网关——nginx、springcloud zuul (互联网公司常规解决方案)
www.a.a.com不能直接请求www.b.b.com的内容,可以通过nginx,根据同域名,但项目名不同进行区分。假设我们公司域名叫www.nginxtest.com
当我们需要访问www.a.a.com通过www.nginxtest.com/A访问,并通过nginx转发到www.a.a.com
当我们需要访问www.b.b.com通过www.nginxtest.com/B访问,并通过nginx转发到www.a.a.com
以上四种是参考转发别人的 原文连接在这里解决ajax跨域_啊哈哈?的博客-CSDN博客_ajax跨域解决方案
如果要通过AJAX把值传到servlet后转发重定向
需要在post里面加上
window.location.reload();
location.assign("转发重定向的页面");
参考代码:
var url = "<%=request.getContextPath()%>/recordrel?cmd=doexam2"; $.post(url,{answers:encodeURIComponent(answers),itemid:encodeURIComponent(itemid),examId:encodeURIComponent(examId), username:encodeURIComponent(username)},function(){ window.location.reload(); location.assign("jsp/examfind.jsp"); alert('交卷成功!'); callback(); });