在 IE 8 中使用 AJAX 处理http_request
Handling http_request in IE 8, using AJAX
我一直在研究某种遥控器一段时间了,并发现了一个让我感到困惑的问题:
遥控器应该控制某种机器。完整的基于硬件的代码是我自己用 c 编写的,但这对我的问题来说并不有趣。我使用网络服务器和网页来访问一些基本命令,就像前进、后退或打开/关闭电机一样(我使用机器板上的 WLAN 接入点连接到它)。到目前为止一切正常,但是......
我的问题是,有几个选项可以同时控制机器的功能(终端、有线连接的笔记本电脑、遥控器、"正常"工作回路)。这意味着,如果机器自行打开电机或工人使用终端,我也有必要对遥控器进行反馈(目前我将不同按钮边框的颜色从绿色=非活动切换到红色=活动)。
我这样做的方式很容易解释:例如,如果电机在 c 中打开,我会写一个带有十进制数的文件,代表二进制代码。就像电机打开是 0001 意味着我写一个 dec 1。电机关闭将是 0010,意味着我写了一个 dec 2。因为可能有多个函数同时运行,所以我只传递像 13 这样的值(电机打开:0001 = 1;前进:0100 = 4;灯打开:1000 = 8;=> 8+4+1=13)。我使用二进制 AND 比较来获取有关状态的实际信息。
尽管如此,我无法每两秒刷新一次页面以检查我写入的文件是否有更改,我使用 ajax 有一个简单而花哨的请求可能性:
var http_request = false;
function RequestCommandStatus(url) {
http_request = false;
if (window.XMLHttpRequest) {
http_request = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Ended due to an error!');
return false;
}
http_request.open('GET', url, true);
http_request.onreadystatechange = control4Commands;
http_request.send(null);
}
之后我做比较的事情:
function control4Commands() {
if (http_request.readyState == 4) {
var answer = http_request.responseText;
if ((answer & 0x1) == 0x1){
//do something
}
if ((answer & 0x2) == 0x2){
//do something
}
if ((answer & 0x4) == 0x4){
//do something
}
if ((answer & 0x8) == 0x8){
//do something
}
}
}
setInterval("RequestValveStatus('myfile.txt')", 1000);
这在 Firefox 中效果很好,但由于某种原因,我在 IE8 中遇到了一个奇怪的问题(即使我启用了所有已知的脚本语言并允许几乎完全的访问和控制):
由于某种原因,请求似乎只执行了一次,但之后页面和服务器之间就不再有交互了。文件的值会像预期的那样更改。如果我手动重新加载页面,例如电机仍在运行,它会将边框的颜色更改为红色。在我看来,这应该确保请求至少成功一次。通过使用开发人员工具的脚本调试器,我收到了错误消息,http_request.open() 由于访问被拒绝而失败。我的第一个建议是,它可能与我读取的文件的路径或类型有关,但我无法使用 IE8 中的 .html、.php、.txt 和"几种"其他类型的文件修复它。更改路径/原点也没有解决问题。
我真的很想和你讨论这个问题,并随时向我发布你关于这种获取函数实际状态的方式的想法。
问候
奥赫姆吉
我很抱歉我的英语不好。如果您不能遵循我的解释,请随时询问:-)
尝试更改
setInterval("RequestValveStatus('myfile.txt')", 1000);
到
setInterval(function() { RequestValveStatus('myfile.txt'); }, 1000);
- AngularJS使用http进行promise处理
- 如何处理HTTP 204”;无内容”;在Restangular POST中
- 处理$http AngularJS返回数据
- 处理 HTTP 请求失败
- 在猫鼬查询返回集合之前,应用程序应该如何处理 http get 响应
- Node.js处理http请求的响应
- 处理http服务器崩溃
- 当请求失败时,Jquery不处理HTTP错误
- 如何处理$http.get中的多个错误
- extjs全局处理http响应
- Angular:未处理http错误的默认处理程序
- AngularJS中的错误处理:http get然后construct
- 在单击事件之前完全处理http get请求
- 如何在获取 API 中处理 HTTP 代码 4xx 响应
- 让多个Angular模态处理http响应数据
- 是否有一种方法为chrome打包应用程序处理Http BasicAuthentication
- 如何使用AngularJS处理$http同步请求
- 当离开状态时,如何停止http请求或停止处理http请求结果
- 用javascript处理HTTP XML流
- 在Cordova / Ionic iOS应用中使用WWW-Authenticate处理HTTP 401