http请求返回304后ajax的reponseText属性为空字符串
我发现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就是空,真是匪夷所思啊。
给出一个刷新后加载的控制台截图:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Google Chrome: 48.0.2564.116(正式版本)m(32位)中已不存在该现象。之前发现oogle Chrome: 48.0.2564.97中的确304返回空。
更新答案:我访问题主的演示链接是有值的
在ajax请求ejs文件的时候,当http状态为304时候,responseText为空。200状态的时候是没问题的。
根据测试,确实是版本问题
chrome版本 48.0.2564.97m下是这个问题。
chrome版本 47.0.2526.106m下也是没有问题的