2016-06-04 13 views
0

Ich versuche, eine Verbindung zu einer PHP-Seite herzustellen.QT QNetworkReply und PHP

ist egal was ich mache, aber QNetworkReply ist immer leer.

das ist mein Code, hoffe jemand hat eine Idee.

QUrl url("http://mysite.it/interface.php"); 
QNetworkRequest request(url); 

request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); 
QUrlQuery params; 
//list of params 


url.setQuery(params); 
connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *))); 

manager->post(request,params.toString(QUrl::FullyEncoded).toUtf8()); 

connect(this, SIGNAL(confirm_signal()), reciver, SLOT(recive_confirm())); 

dies ist der Schlitz für die Antwort

void database::replyFinished(QNetworkReply *reply){ 
    if(reply->error()) 
     { 
     qDebug() << "ERROR!"; 
     qDebug() << reply->errorString(); 

     } 
    else { 
     qDebug()<< reply->readAll().toInt(); 
     qDebug()<< reply->readAll().trimmed(); 
     QByteArray array = reply->readAll(); 
     QString str(array); 
     reply->deleteLater(); 
     qDebug() << "array" <<array; 
     qDebug() <<"string" <<str; 

     QString str2 = QString::fromUtf8(array.data(), array.size()); 

     qDebug() <<str2; 
     int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); 
     qDebug() << QVariant(statusCode).toString(); 
     emit confirm_signal(); 
    } 
} 

alle qDebug() gibt "" als Antwort, mit Ausnahme der Statuscode, ist "200".

<?php 
json_encode("Ok"); 
?> 
+0

der pHP-Code am Ende ist der Inhalt von 'interface.php'-Datei? – Mike

+0

Ja, um ehrlich zu sein, hat Google mir keine Ahnung gegeben, wie man die Antwort zurückgibt..so getestet mit echo und json_encode – user3787626

Antwort

2

Ihr aktueller interface.php Code nichts ausgibt, berechnet sie nur den JSON-String (und es nicht zurückschicken), haben Sie echo zu verwenden.

<?php 
echo json_encode("Ok"); 
?> 

Edit: Es gibt einen weiteren Fehler in Ihrem replyFinished Steckplatz, wenn Sie readAll nennen, derzeit verfügbaren Daten im Gerät zurückgeführt wird. Und beim nächsten Aufruf werden nur neu verfügbare Daten zurückgegeben.

also von qDebug()<< reply->readAll().toInt(); tun Sie lesen derzeit verfügbaren Daten, und Sie es nicht überall speichern, Sie wandeln es nur in einen int (was getan werden kann nicht, da die Daten "Ok" und toInt() kehrt 0) und die nächste readAll() gibt eine leere QByteArray seit "Ok" im vorherigen Aufruf gelesen wurde, glaube ich, was Sie zu schreiben bedeutete, ist dies:

else { 
    QByteArray array = reply->readAll(); 
    qDebug()<< array.toInt(); 
    qDebug()<< array.trimmed(); 
    QString str(array); 
    reply->deleteLater(); 
    qDebug() << "array" <<array; 
    qDebug() <<"string" <<str; 

    QString str2 = QString::fromUtf8(array.data(), array.size()); 

    qDebug() <<str2; 
    int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); 
    qDebug() << QVariant(statusCode).toString(); 
    emit confirm_signal(); 
} 
+0

Ich stimme dir zu, aber der Punkt ist, dass ich bereits damit getestet habe. – user3787626

+0

@ user3787626, siehe meine bearbeitete Antwort. – Mike

+0

Du hast es, danke! – user3787626