Я кодирую, используя угловой 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
? Спасибо за ваше время!
Ваша проблема в том, что вы отправляете данные 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'];
установить ‘Content-type’: ‘application / json’
попробуй что-нибудь подобное
$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"];
В вашем 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)
});
Используйте $ 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;
});
}());