繁体   English   中英

带有QML的JavaScript的怪异行为

[英]Weird behavior of JavaScript with QML

Java脚本的怪异行为。 我正在尝试使用QT-QML和JavaScript开发一个简单的示例应用程序。
在这种情况下,我正在使用HTTP请求,而我使用的是Button,它使用JavaScript发送HTTP请求。

当我在回调函数中收到HTTP请求的响应时,我尝试按以下方式读取HTTP响应的状态。

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

我正在尝试检查readyState是否为4 (4表示完成/完成)
但是,如果条件无法检查到这一点,并且无论readyState值如何,都将其评估为true。
例如,如果readyState0 (0 == 4),那么如果condition的求值结果为TRUE,则不应该这样做。
为什么会发生这种情况。

我也尝试过

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

上面的条件也给出了相同的结果,并且无论readyState值如何,都将其评估为TRUE。
我的JavaScript解释器有什么问题吗?

谢谢。

------更新-----

问题是,我在同一应用程序/进程中都有QML应用程序(发送HTTP请求)和HTTP服务器(该QML HTPP请求中的哪个服务器)。 当我在两个不同的应用程序/可执行文件中分离HTTP服务器和QML应用程序时,它确实可以工作,而当我将两个应用程序合并在同一个可执行文件中时,则会产生问题。 当我将HTTP服务器和QML应用程序合并到一个可执行的QML JavaScript解释器中时,它开始变得怪异。 在运行Web服务器之前,我正在单独的线程中运行QML应用程序。

你试过了吗:

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

...

要断言条件是使用错误的整数真正地评估为true?

另外,由于您是在QML中调用此代码的,所以这可能是您在QML中使用javascript的方式,您能否说明如何从QML调用javascript?

一个描述行为的最小示例将很有帮助。

以下代码对我来说没有问题:

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();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM