今天为了测试项目,需要写测试页面并调用网关测试一系列的项目流程,但是在用XMLHttpRequest调用网关时,发生了一件让我很懵逼的事情,XMLHttpRequest对象(以下简称xmlHttp)的status一直==false,不对应该说是xmlHttp.readyState从2跳过了3直接进入4,然后xmlHttp.status==false,xmlHttp.responseXML的值也是”“,我之前只听说过2xx,3xx,4xx和5xx,怎么会有0呢,当时的郁闷无处发泄,我也并不知道这个问题应该问谁,百度上的也都是一些2xx代表什么,3xx代表什么,4xx代表什么,我只是想取个返回值,在浏览器F12中能看到返回参数的。
下面进入正题:
最后其实发现XMLHttpRequest.status == 0(我也不知道为什么刚开始的时候会弹出false),在一篇博客中发现xmlHttp.status返回的参数有以下三种要求:
- If the state is UNSENT or OPENED, return 0. 如果状态是UNSENT或者OPENED,返回0
- If the error flag is set, return 0. 如果设置错误标签,返回0
Return the HTTP status code. 返回HTTP状态码
而我的情况是,我用了两个IDEA一个开启了网关,一个开启了项目,在项目中调用网关接口出现的问题,网关和项目是不同的Tomcat和端口号,所以出现了跨域访问的安全问题(什么是跨域访问???em。。。我也不是很了解,还是百度一下吧),在我网关代码中并没有设置那些域名脚本可以访问,所以造成了不允许我的项目使用XMLHttpRequest访问网关的问题,最后在我网关中加入
response.setHeader("Access-Control-Allow-Origin","*");
之后就可以正常的返回报文了。
谢谢之前的博客
解决问题的博客https://blog.csdn.net/iaiti/article/details/42192659