QT QNetworkReply和Php

时间:2016-06-04 16:02:14

标签: php qt

我试图连接到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()给出&#34;&#34;作为答案,除了状态代码是&#34; 200&#34;。

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

1 个答案:

答案 0 :(得分:2)

您当前的interface.php代码没有输出任何内容,只是计算JSON字符串(并确实将其发回),您必须使用echo

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

修改replyFinished广告位中还有另一个错误,当您致电readAll时,系统会返回当前可用的数据。下次调用时,只返回新的可用数据。

因此,通过执行qDebug()<< reply->readAll().toInt();您正在读取当前可用的数据,并且您不将其保存在任何位置,您只需将其转换为int(由于数据为"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();
}