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的信息,请检查此答案:。代理可能是一个问题,这并非不可能,您可以尝试不使用代理的脚本,看看是否有效吗?