java脚本的奇怪行为。 我正在尝试使用QT-QML和JavaScript开发一个简单的示例应用程序 在这里我使用HTTP请求,我在Button上使用JavaScript发送HTTP请求。
当我在回调函数中收到HTTP请求的响应时,我试图按如下方式读取HTTP响应的状态。
if( httpReq.readyState == 4 ) //Problem
{
if(httpReq.status == 200 )
{
...
我正在尝试检查readyState
是4
(4表示完成/已完成)
但是,如果条件无法检查此情况,并且无论readyState
值如何,都会评估为真
例如,如果readyState
为0
(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应用程序。
答案 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();
}
}