JavaScript与QML的奇怪行为

时间:2011-09-19 09:18:57

标签: javascript qml

java脚本的奇怪行为。 我正在尝试使用QT-QML和JavaScript开发一个简单的示例应用程序 在这里我使用HTTP请求,我在Button上使用JavaScript发送HTTP请求。

当我在回调函数中收到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' )  

以上条件也会给出相同的结果,并且无论readyState值如何,都会被评估为TRUE 我的JavaScript Interpreter有什么问题吗?

感谢。

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

事实是,我在同一个应用程序/进程中有QML应用程序(发送HTTP请求)和HTTP服务器(服务于此QML HTPP请求)。当我在两个不同的应用程序/可执行文件中分离HTTP服务器和QML应用程序时,它确实有效,当我将两个应用程序组合在同一个可执行文件中时,它会产生问题。当我将HTTP服务器和QML应用程序结合在一个可执行的QML中时,JavaScript解释器开始表现得很奇怪。我在运行Web服务器之前在单独的线程中运行QML应用程序。

2 个答案:

答案 0 :(得分:0)

你有没有尝试过:

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

...

断言用一个错误的整数判断条件是真的吗?

或者,既然你用QML调用它,这可能来自你使用QML和QML的方式,你能说明你如何从QML调用javascript吗?

答案 1 :(得分: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();
    }
}