Я делаю приложение AngularJS с бэкэндом PHP, и я пытаюсь сохранить некоторые данные для записи в базу данных. Я наткнулся на препятствие, которое я пытаюсь перепрыгнуть.
Когда я делаю var_export($_POST)
я получаю пустой (пустой) массив в качестве возврата.
Однако, когда я делаю $return json_decode(file_get_contents("php://input"), false);
Я получаю полный массив со значениями, которые я ожидаю?
Как я могу использовать переменную $ _POST с приведенным ниже?
Мой код AngularJS:
$scope.testPostRequest = function() { $http({ method: 'POST', url: 'requestHandler.php', data: JSON.stringify($scope.scores), // pass in data as strings headers: { 'Content-Type': 'application/x-www-form-urlencoded' } // set the headers so angular passing info as form data (not request payload) }).success(function(data) { console.log(data); if (!data.success) { // if not successful, bind errors to error variables } else { // if successful, bind success message to message $scope.message = data.message; } }); }
Весь мой PHP-код (я просто комментирую интересующее меня возвращение).
//$data = json_decode(file_get_contents("php://input"), false); //return var_export($data); return var_export($_POST);
ExpertSystem прав насчет того, как данные должны быть отформатированы.
Не идеально, но jQuery может содержать решение. Если у вас есть ссылка на jQuery, вы можете установить данные для:
data: $.param($scope.scores);
Подробнее отсюда: http://jeecookbook.blogspot.com/2013/03/angularjs-trick-posting-data-using-url.html
Взято из этого сообщения: как я могу отправлять данные в виде данных формы вместо полезной нагрузки запроса?
Спасибо Райану Тейлору за его ответ, и хотя я выбрал его ответ как правильный, я хотел предоставить другим, смотрящим на это сообщение, решение, которое я придумал. Ответ Райана более точно отвечает на мой вопрос, хотя так славно сэр! Как бы то ни было, я стараюсь избегать использования jQuery для целей моего упражнения:
Кроме того, я изменил свой внутренний код PHP, чтобы сделать следующее:
switch ($_SERVER['REQUEST_METHOD']) { case 'POST': $data = json_decode(utf8_encode(file_get_contents("php://input")), false); if(!empty($data)) { return var_export($data); } break; default: header('HTTP/1.1 405 Method Not Allowed'); break; }
В приведенном выше примере используется исходный ввод PHP для преобразования его в строку JSON. В то время как моя главная задача состояла в том, чтобы попытаться заполнить переменную $ _POST, это рабочее решение, которое я нашел без необходимости jQuery. Примечание. Вы также заметите, что я использую метод utf8_encode, потому что я читал это было необходимо, так как некоторые символы не ASCII могут привести к тому, что строка JSON не сможет декодироваться.
Вышеупомянутое решение также позволяет избежать использования jQuery в вашем приложении.