第二次加载时XMLHttpRequest状态为0
XMLHttpRequest status 0 on second load
当我尝试使用XMLHttpRequest从同一域加载。txt格式的一些数据时,我遇到了一个有趣的问题。我正在尝试加载数据,解析它然后将其存储在localStorage
中var xmlhttp;
// code for IE7+, Firefox, Chrome, Opera, Safari
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}else{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
var temp;
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
temp = xmlhttp.responseText;
}else{
alert("readyState: " + xmlhttp.readyState + "status: " + xmlhttp.status);
}
}
xmlhttp.open("GET","data/somedata.txt", false);
xmlhttp.send();
这段代码只有在清理历史和缓存时才有效;然而,在第二次点击相同的链接时,由于某种原因,我会收到"Readystate: 4, status 0"。
这是否与localStorage有关?
if (!localStorage.somedata || localStorage.somedata.count(':') !== somedata.count(':')) {
localStorage.somedata = temp;
}
window.somedata = JSON.parse(localStorage.somedata);
状态码为零有两种原因
- 从文件协议发起呼叫。
- 当请求发出时,页面正在刷新/导航。
在你的情况下,我认为是#2。如果您正在使用按钮或链接来进行Ajax调用,请确保使用preventDefault
或return false
取消单击操作。
听起来像是缓存问题。尝试切换到POST
方法,或者向GET
请求查询字符串添加时间戳,看看是否会阻止缓存。
xmlhttp.open("POST", "data/somedata.txt", false);
或:
xmlhttp.open("GET", "data/somedata.txt?" + new Date().valueOf(), false);
Edit:如果这些不起作用,请修改您的服务器配置,为该文件或类型发送适当的响应头,以不缓存响应。Ie: Cache-Control: no-cache
在打开新请求之前尝试xmlhttp.abort()
。
相关文章:
- 事件和状态
- 获取选择框的状态
- 相位器状态未捕获参考错误
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何使用密码检测网络中的状态连接
- Ember.js-接口状态应该存储在哪里
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 在Angular 2中布线期间保持零部件处于活动状态
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- XMLHttpRequest未返回值-状态202
- 使用javascript反复检查用户在facebook上的登录状态
- 如何使bxslider仅在移动视图中处于活动状态
- 获取ASP.NET Ajax Timer状态
- React redux初始化功能,无论状态变化如何
- 无法在现有状态转换期间更新-未使用任何非法的setState()
- 悬停下拉菜单即使在鼠标移出后也保持活动状态
- 从组件状态的数组中删除元素
- iOS 中的按钮触摸状态
- 使用AngularJS中的UI路由器将状态重定向到默认子状态
- 设计redux状态树