AJAX跨域问题,解决通过post把值传到servlet后不能转发重定向

通过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();
});

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值