2012-04-20 25 views
1

我一直工作在某種有一段時間了遙控器和想通了,混淆了我一個問題:在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

我爲我的英語不好對不起。隨意問如果你不能按照我的解釋:-)

回答

0

嘗試改變

setInterval("RequestValveStatus('myfile.txt')", 1000); 

setInterval(function() { RequestValveStatus('myfile.txt'); }, 1000); 
+0

其實這什麼也沒有改變。它和以前一樣。在Firefox中仍然不錯 - 在ie8中只成功一次,並在之後凍結。 – 2012-04-20 12:00:13