JavaScript не может POST-данные на сервер через $ http-модуль angularjs

Я кодирую, используя угловой AJAX. Код на стороне клиента:

$http({
method: 'POST',
url: '----/test.php',
data: ({'txtDeviceID': 12345678}),
headers: {
'Content-type': 'application/text'
}
}).then(function successCallback(response) {
console.log(response)
}, function errorCallback(response) {
console.log(response)
});

Код на стороне сервера:

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Origin, X-Requested-With,Content-Type, Accept");
header('Access-Control-Allow-Methods: GET, POST, PUT');
echo $_POST['txtDeviceID'];

Почему я не могу получить texDeviceId? Спасибо за ваше время!

1

Решение

Твоя проблема

Ваша проблема в том, что вы отправляете данные JSON в файл PHP, но PHP ожидает, что они будут в формате param:

  • ваш код клиента отправляет {'txtDeviceID': 12345678}
  • но код сервера ожидает txtDeviceID=12345678

Чтобы решить эту проблему, у вас есть два варианта: изменить код клиента для отправки данных в формате параметров или изменить код сервера для ожидания данных в формате JSON.

изменив свой код клиента

Ищу response.data и изменить запрос content-type в application/x-www-form-urlencodedКроме того, вы должны преобразовать свои данные в формат, используя $httpParamSerializer.

$http({
method: 'POST',
url: '----/test.php',
data: $httpParamSerializer({ 'txtDeviceID': 12345678 }),
// or data: "txtDeviceID=12345678",
headers: {
'Content-type': 'application/x-www-form-urlencoded'
}
}).then(function successCallback(response) {
console.log(response.data)
}, function errorCallback(response) {
console.log(response)
});

Для получения дополнительной информации читайте $ http документы

Объект ответа имеет следующие свойства:

  • data — {string | Object} — тело ответа, преобразованное с
    функции преобразования.
  • status — {число} — код статуса HTTP ответа.
  • headers — {function ([headerName])} — Функция получения заголовка.
  • config — {Object} — объект конфигурации, который использовался для генерации
    запрос.
  • statusText — {строка} — текст статуса HTTP ответа.

или изменение кода вашего сервера.

Для получения необработанных данных вам необходимо использовать file_get_contents('php://input')

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Origin, X-Requested-With,Content-Type, Accept");
header('Access-Control-Allow-Methods: GET, POST, PUT');

$_POST = json_decode(file_get_contents('php://input'), true);
echo $_POST['txtDeviceID'];
2

Другие решения

установить ‘Content-type’: ‘application / json’

2

попробуй что-нибудь подобное

$http({
method: 'POST',
url: '----/test.php',
data: {"txtDeviceID":12345678},
headers: {
'Content-type': 'application/json'
}
}).then(function (response) {
console.log(response)
}, function (response) {
console.log(response)
});

измените свой php файл следующим образом

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Origin, X-Requested-With,Content-Type, Accept");
header('Access-Control-Allow-Methods: GET, POST, PUT');$jsonstring = file_get_contents ( 'php://input' );
$arr = json_decode($jsonstring,true);
echo $arr["txtDeviceID"];
2

В вашем PHP измените echo $_POST['txtDeviceID']; в echo json_encode($_POST['txtDeviceID']);

и в вашем контроллере убедитесь, что data находится на объект.

$http({
method: 'POST',
url: '----/test.php',
data: {'txtDeviceID':12345678}
}).then(function successCallback(response) {
// look specifically for "txtDeviceID"console.log(response.data.txtDeviceID)
}, function errorCallback(error) {
console.log(error)
});
2

Используйте $ http перехватчик, как показано ниже, он работает для меня

(function(){
angular.module('xxxxxxx').factory('sessionInjector', function() {
var sessionInjector = {
request: function(config) {

config.headers['Authorization'] = "Bearer " + sessionStorage.getItem('token');

if(config.method == 'POST') {
if(config.data) {
config.data = $.param(config.data); //jQuery magic but php likes
}
}

return config;
},
response: function(res) {
console.log(res);
return res;
}
};
return sessionInjector;
});
}());
1