Javascript 向QNetworkReply添加HTML标头
我有一个子类QNetworkAccessManager和QNetworkReply,用于处理来自JavaScript应用程序的自定义AJAX请求。它基本上是有效的,只是看起来我的网络回复没有任何标题 我可以验证Javascript 向QNetworkReply添加HTML标头,javascript,html,c++,ajax,qt,Javascript,Html,C++,Ajax,Qt,我有一个子类QNetworkAccessManager和QNetworkReply,用于处理来自JavaScript应用程序的自定义AJAX请求。它基本上是有效的,只是看起来我的网络回复没有任何标题 我可以验证QNetworkAccessManager::createRequest返回的NetworkReply是否正确设置了头,但是我无法从JavaScript访问它。考虑下面的代码: 在JavaScript中: var xhr = new XMLHttpRequest(); xhr.open(
QNetworkAccessManager::createRequest
返回的NetworkReply
是否正确设置了头,但是我无法从JavaScript访问它。考虑下面的代码:
在JavaScript中:
var xhr = new XMLHttpRequest();
xhr.open("POST", "test.php"); // fake url
xhr.responseType = "json";
xhr.setRequestHeader("Test-Header", "42");
xhr.onload = onXHRLoad;
xhr.send();
然后在QNetworkAccessManager
中检索此信息,并用于创建新的QNetworkReply
,如下所示:
NetworkReply *NetworkAccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *outgoingData)
{
if( request.url().host() == "test" )
{
NetworkReply* nr = new NetworkReply(request, outgoingData);
if (nr->hasRawHeader("Test-Header"))
{
qDebug() << "[Qt] Sending Network Reply with Test-Header value: " << nr->rawHeader("Test-Header");
}
return nr;
}
return QNetworkAccessManager::createRequest(op, request, outgoingData);
}
我可以验证该值设置是否正确,并且新创建的应答确实存在头,但是当JavaScripts接收到响应时,头不存在(而数据不存在):
函数onXHRLoad(事件){
var header=event.target.getResponseHeader(“Test header”);//因此,在
QNetworkReply
中需要一些额外的步骤,这些步骤在任何地方都没有记录。要使其正常工作,我需要将以下内容添加到构造函数中:
setRequest(request);
setUrl(request.url());
setOperation(operation);
这项工作现在如预期的那样有效
您可以在此处看到一个示例:
function onXHRLoad(event) {
var header = event.target.getResponseHeader("Test-Header"); // <- null
}
setRequest(request);
setUrl(request.url());
setOperation(operation);