我试图连接到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");
?>
答案 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();
}