记录ajax请求302跨域的解决方案——formdata

前两天后端同事遇到了一个问题,就是写的前端页面在发送ajax请求后,后端会给前端报302,然后让前端重定向到指定的url,但是页面一直报错。

上手看了代码后,看到他的前端ajax请求代码类似于下方代码:

$.ajax({
	type: "POST",
	url:"/requestUrl/xxx",
	data: JSON.stringify(data),
	dataType: "json",
	contentType: "application/json;charset=utf-8",
	success:function (result){
        alret("成功")
    },
    error: function (error){
    	alert("系统异常,请稍候再试!");
    },
    complete:function (jqxhr,status) {
    	if("REDIRECT" == jqxhr.getResponseHeader("REDIRECT")) { //若HEADER中含有REDIRECT说明后端想重定向,
			win.location.href = jqxhr.getResponseHeader("CONTENTPATH");//将后端重定向的地址取出来,使用win.location.href去实现重定向的要求
		}
    }
 });

请求后,前端代码一直走error的回调,既没有走success回调也没有走complete回调,按照正常的逻辑来说302后应该走complete回调做响应的处理。

于是在打印一下ajax的状态,发现XHR对象中的readyState和status都为0,那这块就有问题了,ajax的请求发送后状态为302,响应没有任何参数,但是浏览器又发送了一个指定url域名的的get请求,并提示跨域;多次尝试后,认为是ajax在发送第一个请求后,得到后端302的响应,紧接着把后端返回的重定向地址当做一个接口进行调用,发送了GET请求,中途出错了,所以进入了error的回调。

最终采用formdata的方式来调用接口,通过form标签里的action来进行调用,完美解决问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值