2016-06-04 2 views
0

Я пытаюсь подключиться к php-странице.QT QNetworkReply и Php

не имеет значения, что я делаю, но QNetworkReply всегда пуст.

это мой код, надеюсь, у кого-то появилась идея.

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

это слот для ответа

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

все QDebug() дает "" в качестве ответа на код статуса, который кроме "200".

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

это код PHP в конце содержимое 'interface.php' файла? – Mike

+0

Да, честно говоря, google не предоставил мне никаких подсказок о том, как отдать ответ. Протестировано с помощью echo и json_encode. – user3787626

ответ

2

текущий interface.php код не выводит ничего, он просто вычисляет строку JSON (и не отправить его обратно), вы должны использовать echo.

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

Edit: Существует еще одна ошибка в вашем replyFinished слот, когда вы звоните readAll, имеющиеся в настоящее время данные в устройстве возвращается. И в следующий раз, когда вы его назовете, возвращаются только новые данные.

Таким образом, делая qDebug()<< reply->readAll().toInt(); вы читаете в настоящее время доступные данные, и вы не сохраните его в любом месте, вы просто преобразовать его в междунар (который не может быть сделано, поскольку данные "Ok" и toInt() возвращает 0), и следующий readAll() возвращает пустой QByteArray поскольку "Ok" читался в предыдущем вызове, я думаю, что вы имели в виду, чтобы написать это:

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

Я согласен с u, но дело в том, что я уже тестировал это. – user3787626

+0

@ user3787626, см. Мой отредактированный ответ. – Mike

+0

У вас его есть, спасибо! – user3787626

Смежные вопросы