2014-11-26 4 views
0

У меня есть класс запроса, который должен получить данные после JSonfile_get_contents («PHP: // ввод» возвращает пустую строку

class Request 
{ 
    public $data; 

    public function __construct () 
    { 
     $this->data = json_decode(file_get_contents("php://input"), true); 
    } 
} 

, когда я выполнить print_r($this->data), то print_r() пуста, когда я выполнить 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 и хромом

class ResultController extends Controller 
{ 

    public function loadLogs () 
    { 
     $this->prepareRequest(); 
    } 

    public function prepareRequest () 
    { 
    print_r($this->request->data); 
    var_dump($this->request->data); 
    } 

в хроме я получаю массив и светлячок я получаю просто пустым

клиентского код

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

Почему вы не используете '$ _POST' вместо' file_get_contents ("PHP: // ввод") '? – RichardBernards

+0

И что вы получаете, когда выполняете 'echo print_r ($ _ POST, true);'? – RichardBernards

+1

@RichardBernards Потому что, когда вы отправляете что-то вроде JSON, '$ _POST' не будет заполняться. –

ответ

0

php://input можно прочитать только один раз. Вам нужно будет сохранить результат где-то и доступ, что

: До PHP 5.6, поток открыт с PHP: // вход может быть только прочитать один раз; поток не поддерживал операции поиска. Однако в зависимости от реализации SAPI можно открыть другой поток ввода php: // и перезапустить. Это возможно только для , если данные тела запроса сохранены. Обычно это для запросов POST, но не для других методов запроса, таких как PUT или PROPFIND.

http://php.net/manual/en/wrappers.php.php

+0

Я сохраняю результат в $ this-> data –

+0

и объект seocnd, к которому вы обращаетесь к нему? Она должна быть где-то статической, которая существует во всех случаях – exussum

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