IE中的XMLHTTPRequest ReadyState问题
XMLHTTPRequest ReadyState issue in IE
从我的UI线程,我试图启动一个工作线程做XMLHTTPRequest。它在Chrome中工作得很好,但在IE 10中不起作用。在IE中,它总是给我ReadyState =1, Status=0和停止。在chrome的代码工作完美,如预期的那样。谁能告诉我,请什么可能是错误的,这里涉及到一个浏览器?
UI线程代码: if (typeof (Worker) !== "undefined") {
var w = new Worker("worker.js");
var now = new Date();
w.postMessage({
newid: ws.length,
starttime: now
});
下面是我的worker.js代码
this.onmessage = function ($event) {
var myid = 0;
var mystarttime = "";
var url = "http://rest-service.guides.spring.io/greeting";
myid = $event.data.newid;
mystarttime = $event.data.starttime;
var gotresponse = function () {
var rs = new Response();
if ((xhr.readyState == 4 || xhr.readyState == 3) && xhr.status == 200) {
var result = JSON.parse(xhr.responseText);
rs.id = myid;
rs.starttime = mystarttime;
rs.data = result.content;
rs.endtime = new Date();
}
else {
rs.err = 'Error. ReadyState: ' + xhr.readyState + ' Status:' + xhr.status;
}
self.postMessage(rs);
self.close();
};
var timedout = function () {
var rs = new Response();
rs.err = 'Error TIMEOUT occurred : ' + xhr.statusText + ' ReadyState: ' + xhr.readyState + ' Status:' + xhr.status + ' E: ' + e + ' Msg:' + e.message;
rs.starttime = mystarttime;
rs.data = result.content;
rs.endtime = new Date();
self.postMessage(rs);
self.close();
};
function Response(name, gender) {
this.id = 0;
this.data = "";
this.starttime = new Date();
this.endtime = new Date();
this.err = "";
}
var xhr = new XMLHttpRequest();
getSpecData();
function getSpecData() {
try {
xhr.onload = function () { console.log(this.responseText); };
xhr.open('GET', url, false);
xhr.timeout = 5000;
xhr.setRequestHeader('Content-Type', 'application/json');
//xhr.setRequestHeader('Authorization', 'Basic ' + btoa('sk:pwd'));
xhr.ontimeout = timedout;
xhr.onreadystatechange = gotresponse;
//xhr.withCredentials = true;
xhr.send();
} catch (e) {
var rs = new Response();
rs.err = 'Error occured : ' + xhr.statusText + ' ReadyState: ' + xhr.readyState + ' Status:' + xhr.status + ' E: ' + e + ' Msg:' + e.message;
self.postMessage(rs);
self.close();
}
}
};
我的意思是,在readystatechange事件发生后添加超时:
var gotresponse = function () {
setTimeout(function(){
var rs = new Response();
if ((xhr.readyState == 4 || xhr.readyState == 3) && xhr.status == 200) {
var result = JSON.parse(xhr.responseText);
rs.id = myid;
rs.starttime = mystarttime;
rs.data = result.content;
rs.endtime = new Date();
}
else {
rs.err = 'Error. ReadyState: ' + xhr.readyState + ' Status:' + xhr.status;
}
self.postMessage(rs);
self.close();
},500);
};
试试吧
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- JavaScript Pub/Sub属性访问问题
- JavaScript异步问题
- 如何解决Yii中的页面刷新问题
- Safari(Mac OS)上的jQuery平滑滚动问题
- jqGrid树网格问题
- 使用正则表达式评估电子邮件地址时出现性能问题
- 如何消除代码中的未定义和其他问题
- JavaScript代码问题:我正在将对象转换为数组
- 三星智能电视应用程序;Brightcove示例应用程序远程控制问题
- 由于iframe导致的问题
- ReactJS和SpringDataRest缓存问题可能与websocket有关
- IE中的XMLHTTPRequest ReadyState问题