2014-10-30 2 views
0

자바 스크립트 애플리케이션에서 커스텀 AJAX 요청을 처리하기 위해 하위 클래스 인 QNetworkAccessManager와 QNetworkReply가 있습니다. 내 네트워크 응답에서 헤더가 제거 된 것만 제외하고 대부분 작동합니다.QNetworkReply에 HTML 헤더 추가

QNetworkAccessManager::createRequest에 의해 반환 된 NetworkReply이 헤더가 올바르게 설정되어 있는지 확인할 수 있지만 JavaScript에서 액세스 할 수는 없습니다.

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); 
} 

생성자 NetworkReply 내부 내가 헤더 값을 검색 : 자바 스크립트에서

:

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을 만드는 데 사용되는 아래의 코드를 살펴 보자 요청에서 답장으로 설정하십시오.

if (request.hasRawHeader("Test-Header")) 
{   
    this->setRawHeader("Test-Header", request.rawHeader("Test-Header")); 
} 
,515,

I는 (데이터 인 동안)에 자바 스크립트 헤더가없는 응답을 수신하지만 때,이 값이 정확하게 설정되어 새로 생성 된 응답이 실제로 상기 헤더 존재를 않는다 확인할 수 그래서 그것을

function onXHRLoad(event) { 
    var header = event.target.getResponseHeader("Test-Header"); // <- null 
} 

답변

0

어디서나 문서화되지 않은 QNetworkReply에 몇 가지 추가 단계가 필요합니다. 작동 시키려면 다음을 생성자에 추가해야했습니다.

setRequest(request); 
setUrl(request.url()); 
setOperation(operation); 

이제 예상대로 작동합니다.

여기에 예를 볼 수 있습니다. https://code.google.com/p/htmapp/source/browse/#hg%2Ffrwk%2Fqt