在 IE 8 中使用 AJAX 处理http_request

Handling http_request in IE 8, using AJAX

本文关键字:处理 http request AJAX IE      更新时间:2023-09-26

我一直在研究某种遥控器一段时间了,并发现了一个让我感到困惑的问题:

遥控器应该控制某种机器。完整的基于硬件的代码是我自己用 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);