XMLHttpRequest请求XML接口在IE正常Chrome中pending如何解决
问题原因
- 最核心的原因是你代码中使用了同步XMLHttpRequest:
req.open("GET", "LINK" ,false)中第三个参数传false代表发起同步请求,Chrome浏览器对同步请求的限制远严格于IE,目前Chrome已经逐步禁止在页面主线程中使用同步XHR,符合拦截规则的请求会直接被挂起进入pending状态。 - 接口响应头不符合Chrome校验规则:你调用JSON格式公开API正常,说明问题出在这个XML接口本身的响应配置:
- 响应的
Content-Type头未正确配置:需返回application/xml、text/xml等和XML格式匹配的类型,Chrome对同步请求的返回内容类型校验比IE严格,类型不匹配会直接阻塞请求。 - 跨域CORS配置缺失:如果XML接口和你的前端页面不属于同域,IE默认的同源策略校验更宽松,无CORS头也可能放行,但Chrome会直接拦截跨域同步请求,导致请求一直pending。
- 缓存控制头缺失:如果接口未返回明确的缓存规则头,Chrome的缓存校验逻辑会卡住同步请求,IE无此类严格校验。
- 响应的
修复方案
- 优先替换为异步请求:把
req.open的第三个参数改为true,异步XHR是目前所有主流浏览器支持的标准用法,无兼容和拦截问题。 - 调整XML接口响应配置:确保接口返回正确的
Content-Type头,跨域场景下补充符合要求的CORS响应头。 - 若必须使用同步请求:确保接口和前端页面部署在同域下,且所有响应头字段符合Chrome规范,无格式错误或缺失。
内容的提问来源于stack exchange,提问作者m4rtin
相关产品推荐
相关产品推荐

