ajax请求controller ajax跨域报错处理( 二 )

  1. 测试过程以及一些注意事项
    首先,前端的ajax发送请求时
crossDomain: true,1这行代码可以忽略,对结果没有什么较大的影响 。
在前台进行设置的时候我还找见一个需要在上面加上以下代码来进行处理,但是对我没有用,你们可以试试
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">1测试注掉crossDomain: true,对运行不影响,
测试注掉xhrFields: {withCredentials: true},得到的两个Cookie的ID不一致,出现了问题,所以xhrFields: {withCredentials: true},必备
测试后台只写
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));1运行结果进入方法体,但是返回的时候不会进入success方法,进入error方法并且页面报错信息如下
ajax请求controller ajax跨域报错处理

文章插图
 
 
ajax请求controller ajax跨域报错处理

文章插图
 
 
ajax请求controller ajax跨域报错处理

文章插图
 
后台测试只写
response.setHeader("Access-Control-Allow-Credentials", "true");1运行结果进入方法体,但是返回的时候不会进入success方法,进入error方法并且页面报错信息如下
ajax请求controller ajax跨域报错处理

文章插图
 
后台只写
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");1会进入后台的方法体,页面都会报错并且弹出error弹窗
测试后台写全
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");response.setHeader("Access-Control-Allow-Credentials", "true");123成功进入方法体,结果成功返回,进入success方法并弹出返回的结果,成功的跳转页面
ajax请求controller ajax跨域报错处理

文章插图
 
 
ajax请求controller ajax跨域报错处理

文章插图
 
 
ajax请求controller ajax跨域报错处理

文章插图
 
测试只写其中的两个,除了只写这两行代码的时候执行成功,其他两种组合方式都以失败告终
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));response.setHeader("Access-Control-Allow-Credentials", "true");12详细的原因都在代码块的备注中写的很详细了,如果有还不是很懂的可以看下面的链接地址
最终简述一下解决ajax发送跨域的请求的办法
ajax中加入一行代码如下(有的人加上这一句代码后台不用设置就可以,但是我不可以)
xhrFields: {withCredentials: true},1Controller的方法体内加入如下两行代码
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));response.setHeader("Access-Control-Allow-Credentials", "true");12问题成功的解决!
顺便说一下,在你需要对session操作的方法体内和ajax请求,如果ajax加了携带Cookie的代码,后台的方法体内没有加上那两行代码的话,可以对数据进行操作,但是return的时候不会正确的进入到success的方法体内,一直会进入到error的方法 。但是值尽然操作成功了,而且还是同一个Cookie,这个问题目前未知,后台加上那两行代码的时候,就一切正常了 。
问题,为什么我在登录的时候已经携带了Cookie过去,在其他的ajax请求的时候我也都携带了Cookie,那么为什么我在对Cookie的数据进行操作的时候没有任何问题,但是值确不能正确的返回到前台,无法进入success?
刚才测试的时候又出现的一个新的问题,哎,头疼,脑子已经糊了 。
我当时解决问题的参考资料:https://blog.csdn.net/cckevincyh/article/details/81140443
进阶资料:https://blog.csdn.net/wzl002/article/details/51441704
进行配置详细解释的进阶资料:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS#功能概述
强力推荐研究观看两个进阶资料,看了一遍以后虽说不是能瞬间醒悟但是这个资料里面对一些跨域HTTP(CORS)讲解的非常到位,其实搞了半天才解决的原因还是技术太浅了,综上所述其实前台ajax就一行代码就可以解决,后台的Controller只需要两行代码就可以,就这么三行代码,但是我搞了一个晚上才解决,心累啊,找到了解决办法的那一刻,我突然有种想哭的感觉…希望有人看到了之后可以一起研究学习,也希望能给你们提供到帮助!


推荐阅读