我一直工作在某種有一段時間了遙控器和想通了,混淆了我一個問題:在IE 8處理HTTP_REQUEST,使用AJAX
遠程CONTROLE應該控制某種機。完整的基於硬件的代碼是由我自己編寫的,但這對我的問題並不真正有趣。 我使用網絡服務器和網頁來訪問一些基本命令,就像向前,向後或開啓/關閉電機(我在機器上的電路板上使用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的一個奇怪的問題(即使我啓用了所有已知的腳本語言,並允許幾乎完全訪問和控制):
由於某種原因,請求似乎只執行一次,但在此之後,頁面和服務器之間不再有交互。文件的值就像它應該改變的那樣。如果我重新加載頁面manualy,並且例如,電機仍在運行,它會將邊框的顏色更改爲紅色。在我看來,這應該確保請求至少一次成功。 通過使用開發人員工具的腳本調試程序,我得到了錯誤消息,即http_request.open()因訪問被拒絕而失敗。我的第一個建議是,它可能是關於我讀取的文件的路徑或類型,但我無法使用.html,.php,.txt和「其他幾種」在IE8中修復它。改變路徑/原點也沒有解決問題。
我真的很想和你討論這個問題,並隨時向我發表你對這種獲得函數實際狀態方式的想法。
問候,
Ohemgi
我爲我的英語不好對不起。隨意問如果你不能按照我的解釋:-)
其實這什麼也沒有改變。它和以前一樣。在Firefox中仍然不錯 - 在ie8中只成功一次,並在之後凍結。 – 2012-04-20 12:00:13