Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向QNetworkReply添加HTML标头_Javascript_Html_C++_Ajax_Qt - Fatal编程技术网

Javascript 向QNetworkReply添加HTML标头

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和QNetworkReply,用于处理来自JavaScript应用程序的自定义AJAX请求。它基本上是有效的,只是看起来我的网络回复没有任何标题

我可以验证
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);