http请求返回304后ajax的reponseText属性为空字符串

发布于 2022-09-02 09:01:27 字数 1914 浏览 20 评论 0

我发现http协议在返回304的情况下,xmlhttprequest对象的reponseText属性竟然是空串,如果返回304,应该得到的是本地的缓存数据才对。下面是测试代码:

var _RT = {};
_RT.newRequest = function(){
   var factories = [function() { return new ActiveXObject("Msxml2.XMLHTTP"); },function() { return new XMLHttpRequest(); },function() { return new ActiveXObject("Microsoft.XMLHTTP"); }];
   for(var i = 0; i < factories.length; i++) {
        try {
            var request = factories[i]();
            if (request != null)  return request;
        }
        catch(e) { continue;}
   }
}

_RT.request = function(path){
   var request = new _RT.newRequest()
   request.open("GET", path, false);
   
   try{request.send(null);}
   catch(e){return null;}
   
   if ( request.status == 404 || request.status == 2 ||(request.status == 0 && request.responseText == '') ) return null;
   
   return request.responseText
}
var txt = '';
txt = _RT.request('test.ejs');
console.log(1,txt);
txt = _RT.request('test.ejs');
console.log(2,txt);
txt = _RT.request('test.ejs?v='+Math.random());
console.log(3,txt);

演示地址:http://silian.whyun.com/ajax/rt.html
运行后看控制台,如下现象:

加载次数请求1请求2请求3
第一次加载200,reponseText非空304,reponseText为空200,resonpseText非空
刷新后加载304,reponseText为空304,reponseText为空200,resonpseText非空

最终发现,只要304,reponseText就是空,真是匪夷所思啊。
给出一个刷新后加载的控制台截图:

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

花辞树 2022-09-09 09:01:27

Google Chrome: 48.0.2564.116(正式版本)m(32位)中已不存在该现象。之前发现oogle Chrome: 48.0.2564.97中的确304返回空。

千鲤 2022-09-09 09:01:27

更新答案:我访问题主的演示链接是有值的图片描述

北斗星光 2022-09-09 09:01:27

在ajax请求ejs文件的时候,当http状态为304时候,responseText为空。200状态的时候是没问题的。
根据测试,确实是版本问题
chrome版本 48.0.2564.97m下是这个问题。
chrome版本 47.0.2526.106m下也是没有问题的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文