2011-09-19 105 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