我有一个请求类,应该获得post json数据
class Request
{
public $data;
public function __construct ( )
{
$this->data = json_decode(file_get_contents("php://input"), true);
}
}
当我执行print_r($this->data)
时,print_r()
是emtpy,当我执行var_dump()
时,内容会显示为
我作为POST请求发送到服务器的内容
{"currentFilter": {"groupSelect":"all","hostSelect":"all","prioritySelect":"all","priorityOf":"none","priorityTo":"none","periodSelect":"all","periodDateStart":"none","periodDateEnd":"none","messageFilter":"none"},"firstseq":null,"lastseq":null}
我做错了,我得到一个空字符串
不同之处在于浏览器firefox和chrome
之间class ResultController extends Controller
{
public function loadLogs ( )
{
$this->prepareRequest();
}
public function prepareRequest ( )
{
print_r($this->request->data);
var_dump($this->request->data);
}
在chrome中我得到了数组,而在firefox中我得到的只是null
客户代码
load : function ( ) {
var deferred = $.Deferred();
var currentFilter = FilterModel.getCurrentFilter();
var data = {
'currentFilter' : currentFilter,
'firstseq' : LogsController.firstseq,
'lastseq' : LogsController.lastseq
};
var url = 'php/main.php?controller=Result&action=loadLogs';
server.post(url, data).done(function ( data ) {
LogsController.firstseq = data.firstelem;
LogsController.lastseq = data.lastelem;
LogsView.appendLogs(data.resultdata);
view.setPriorityColor();
deferred.resolve();
}).fail(function ( textStatus ) {
view.popupError(textStatus.responseText);
});
return deferred.promise();
},
答案 0 :(得分:0)
php://input
只能读一次。您需要将结果保存在某处并访问
:在PHP 5.6之前,使用php://输入打开的流只能是 读一次;流不支持搜索操作。然而, 根据SAPI实现,可能会打开 另一个php://输入流并重新开始读取。这是唯一可能的 如果请求正文数据已保存。通常情况是这样的 对于POST请求,但不是其他请求方法,例如PUT或 PROPFIND。