Javascript QWebView根据GET请求加载页面失败

Javascript QWebView根据GET请求加载页面失败,javascript,c++,ajax,qt,qwebview,Javascript,C++,Ajax,Qt,Qwebview,我正试图通过在QWebView中使用的GET-in-JavaScript加载一个站点。如果我使用jQuery.ajax它会给我一个错误。解决方案是采用XMLHttpRequest 这是我的JavaScript代码: var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200

我正试图通过在
QWebView
中使用的GET-in-JavaScript加载一个站点。如果我使用
jQuery.ajax
它会给我一个错误。解决方案是采用
XMLHttpRequest

这是我的JavaScript代码:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        var data = jQuery.parseXML(xmlhttp.responseText);
        alert(data);
    } else if (xmlhttp.readyState == 4) {
        alert(JSON.stringify(xmlhttp));
    }
}

xmlhttp.open("GET", CO_SERVICE, true);
xmlhttp.setRequestHeader("Authorization", "Basic " + btoa("user:password"));
xmlhttp.send();
它在铬合金中工作得很好。如果我执行Qt应用程序并加载文件,则:

QNetworkProxyFactory::setUseSystemConfiguration(true);

ui->webView->load(QUrl("qrc:///index.html"));
ui->webView->show();
我得到这个错误:


我做错了什么?

这是我的解决方案,它对我有效:

JavaScript

this.done = function (value) {
    console.log(value);
};

getRequest.done.connect(this, done);
getRequest.get("url", "username", "password");
C++

main window.h

private:
    Ui::MainWindow *ui;
    GetRequest* mGetRequest;

private slots:
    void addJSObject();
#ifndef GETREQUEST_H
#define GETREQUEST_H

#include <QObject>
#include <QString>

#include <QNetworkReply>
#include <QNetworkAccessManager>

class GetRequest : public QObject {
    Q_OBJECT

public:
    explicit GetRequest(QObject *parent = 0);
    ~GetRequest();

public slots:
    void get(QString url, QString username, QString password);

signals:
    void done(QString value);

private:
    QNetworkAccessManager* mNetworkAccessManager;

private slots:
    void replyFinished(QNetworkReply* networkReply);
};

#endif // GETREQUEST_H
main window.cpp

mGetRequest = new GetRequest();

QObject::connect(ui->webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(addJSObject()));

ui->webView->load(QUrl("qrc:/index.html"));


void MainWindow::addJSObject() {
    ui->webView->page()->mainFrame()->addToJavaScriptWindowObject(QString("getRequest"), mGetRequest);
}
GetRequest.h

private:
    Ui::MainWindow *ui;
    GetRequest* mGetRequest;

private slots:
    void addJSObject();
#ifndef GETREQUEST_H
#define GETREQUEST_H

#include <QObject>
#include <QString>

#include <QNetworkReply>
#include <QNetworkAccessManager>

class GetRequest : public QObject {
    Q_OBJECT

public:
    explicit GetRequest(QObject *parent = 0);
    ~GetRequest();

public slots:
    void get(QString url, QString username, QString password);

signals:
    void done(QString value);

private:
    QNetworkAccessManager* mNetworkAccessManager;

private slots:
    void replyFinished(QNetworkReply* networkReply);
};

#endif // GETREQUEST_H

这可能就是
警报(JSON.stringify(xmlhttp))调用生成。因为您字符串化了xmlhttp对象。@Jite我知道,但仍然有一些错误。响应为null,它跳转到else if的事实证明发生了错误。如果它跳转到
else
,可能是因为脚本返回的状态不是200。我在json数据中看不到status属性,因此不确定是哪个属性,但可能您请求的页面不存在?@Jite
“status”:0
。这可能是因为我的网络使用代理吗?但是,我可以在JS中加载依赖项,该依赖项位于内部服务器上。有关状态代码0的信息,请检查此答案:。代理可能是一个问题,这并非不可能,您可以尝试不使用代理的脚本,看看是否有效吗?