ajax请求成功之后,自动打开一个空白页面,并打印出了返回内容

一、问题描述

ajax请求成功之后,自动打开一个空白页面,并打印出了返回内容,返回值是规定的success内容:{code: "200", msg: "请求成功"}。

1、不走success方法,只走error方法
2、自动打开一个空白页面,并打印出了返回内容

二、解决过程

这就很奇怪了,ajax对于我们来说是在是太熟悉了,但自动打开新的空白页,还是第一次朋友。百思不得其解,一步步找问题吧。

1、
经过打印,发现走入的是error方法。排除跨域之后,一般是返回格式的原因,去掉datetype试试,还是走的error

2、
打印error的错误信息

//在error方法中,加上这部分代码,会自动打印出http状态码,还有ajax的完成状态等
 error: function(XMLHttpRequest, textStatus, errorThrown) {
               						 alert(XMLHttpRequest.status);  //302  页面重定向
                					alert(XMLHttpRequest.readyState);  //4,代表请求完成,解析数据完成
                					alert(textStatus);
            						},

这部分参考博客:https://www.cnblogs.com/dudu/p/ajax_302_found.html
大家也可以百度一下ajax的

XMLHttpRequest.readyState   //这个代表的也是ajax的生命周期,建议好好看一下

      由ajax的生命周期可以知道,这个302是服务器发送给前端的。那么这个302是如何发送给前端的呢,大胆猜测是框架封装的方法。比如请求的时候少带什么参数,或者请求的格式不对的时候,自动进行重定向。类似于大家以前常做的登录功能,当检测到未登录用户进行请求的时候,我们就给它跳转到登录页。也类似于laravel的中间件过滤。

3、console控制台

在这里插入图片描述
      这里发现了页面进行了重定向。打开console控制台,发现请求的头部是302,返回的response带有一个x-redirect的url,十有八九是又一次发生了重定向。而且这个x-redirect的ur正是我们要请求的url地址,只不过后面多了一个参数。这个参数应该服务器自动给加上去的,就比如我们发送url给服务器,服务器收到之后,发现这个url不完整或者不符合规定,然后服务器就重新组合了一下这个url,然后302重定向一下。。很接近真相了吧

三、问题所在

通过以上分析,大概是知道我们应该是少传了一些参数,搜索项目中的其他ajax请求,发现细微区别,是url少发送了一个参数。

					错误的:?r=manage/manage-xxx"
					正确的:?r=manage/manage-xxx"+ "&projectId=" + projectId

      这部分也和我们控制台的x-redirect 相对应,重定向之后,就是给url加上了这个projectId参数,然后重新进行了请求。

四、关于只走error的问题

为什么返回的http状态码是302,但是一直都走error方法呢,这里总结一下:

1、
ajax的success方法,只有具体状态码为 status >= 200 && status < 300 || status === 304;才会走。如果是其他的状态码都只能走error方法。在jquery的源码中也没有定义专门的error方法,所以只要状态码不符合success的,默认都是走我们写好的error里面。

2、
另外需要注意的一点是,get、post就是在ajax的基础上进行封装的,只封装了success,并没有封装error方法,所以,只要请求返回的状态码不是200-300,就不会走回调方法

参考地址:(这部分附有success的源码)https://www.cnblogs.com/52XF/p/post302.html

好吧,很弱智的问题,只是排错过程还是值得记录一下。console控制台的各种参数都要注意一下,这样才能快速锁定问题,解决问题。

end

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁柱同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值