2011-09-19 84 views
2

java腳本的怪異行爲。 我正在嘗試開發一個使用QT-QML和JavaScript的簡單示例應用程序。
在這我使用HTTP請求,我有使用JavaScript發送HTTP請求的按鈕。使用QML的JavaScript的奇怪行爲

當我在回調函數中收到HTTP請求的響應時,我試圖按如下方式讀取HTTP響應的狀態。

if(httpReq.readyState == 4) //Problem 
{ 
    if(httpReq.status == 200) 
    { 
      ... 

我想檢查是否readyState4(4代表完成/完成)
但是,如果條件未能檢查並獲取評估爲真,無論readyState價值。
例如,如果readyState0(0 == 4),那麼如果條件被評估爲TRUE則不應該。
爲什麼會發生這種情況。

我也曾嘗試

1. if(parseInt(httpReq.readyState) == 4) 
2. if(Number(httpReq.readyState) == 4) 
3. if(httpReq.readyState == '4') 

以上條件也給予了同樣的結果和被評估爲TRUE無論readyState價值。
我的JavaScript解釋器有問題嗎?

謝謝。

------ ----- UPDATE

的是,我有QML應用程序(發送HTTP請求)和HTTP服務器(服務器這個QML HTPP請求)兩者在同一應用程序/處理。當我在兩個不同的應用程序/可執行文件中分離HTTP服務器和QML應用程序時,它確實有效,並且當我將這兩個應用程序組合在同一個可執行文件中時,就會產生問題當我在一個可執行文件中同時使用HTTP服務器和QML應用程序時QML JavaScript解釋器開始表現怪異。在運行Web服務器之前,我在單獨的線程中運行QML應用程序。

+0

你試過像'號(httpReq.readyState)=== 4'代碼? – kirilloid

+0

不,我會嘗試。 – psp1

+0

當我寫,'logPrint(「結果是:」+(httpReq.readyState == 4));'它打印與'==='相同。 – psp1

回答

0

你嘗試:

if(httpReq.readyState == 4) //Problem 
{ 
    console.log("Evaluated to true with: " + httpReq.readyState); 

... 

斷言,條件是真正的評估,以真正有錯的整數?

另外,既然你在QML中調用了這個,這可能來自於你在QML中使用javascript的方式,你能展示如何從QML調用javascript嗎?

+0

它不從QML調用,QML有一個按鈕 - >點擊按鈕之後我調用JS函數發送HTTP請求使用XMLHttpRequest對象,並在響應回調中我有這個代碼。我已經嘗試過以上測試,它打印'評估爲真:0' – psp1

+0

好吧,這聽起來真的很愚蠢,但你確定你沒有「;」在你的if之後(也許在最右邊,在編輯器中不可見?) 你能提供一個最簡單的代碼嗎? – coyotte508

+0

不,它不存在。,請參閱更新問題。 – psp1

0

具有所描述的行爲的最小示例將會很有幫助。

下面的代碼工作對我來說沒有任何問題:

import QtQuick 1.0 

Item { 
    Component.onCompleted: { 
     var req = new XMLHttpRequest(); 
     req.onreadystatechange = function() { 
      console.log("readyState: " + req.readyState); 

      if (req.readyState == XMLHttpRequest.DONE) { // 4 instead of 'XMLHttpRequest.DONE' works here too 
       console.log("Request complete"); 

       if (req.status == 200) { 
        console.log("Status code: 200"); 
        console.log(req.responseText.slice(0, 50) + "...") 
       } 
      } 
     } 

     req.open("GET", "http://stackoverflow.com/"); 
     req.send(); 
    } 
} 
+0

事情是,我在同一個應用程序/進程中都有QML應用程序(它發送HTTP請求)和HTTP服務器(哪個服務器這個QML請求)。當我在兩個不同的應用程序/可執行文件中分離HTTP服務器和QML應用程序時,它確實有效,並且當我將這兩個應用程序組合在同一個可執行文件中時,就會產生問題當我在一個可執行文件中同時使用HTTP服務器和QML應用程序時QML JavaScript解釋器開始表現怪異。在運行Web服務器之前,我在單獨的線程中運行QML應用程序。 – psp1