我在函数中有这个Angular代码:
function doAjax() {
$http({
method: 'POST',
url: 'http://thatsmyipv4address/MarkBeacons/www/test.php',
data: {
'dispositivo': getDevice(),
'momentoacceso': getMomentoExacto()
}
})
.then(function (data) {
alert("Data Saved: " + data.response);
console.log(data);
}, function (error) {
//alert('error: ' + error);
console.log('error: ' + error.data);
});
}
当我调用doAjax()
时,它必须向我的 test.php 发送一条POST消息,其值为getDevice()
,返回一个String和getMomentoExacto()
返回另一个String。
但是当我执行 test.php :
时$link = mysqli_connect("localhost", "root", "", "markbeacons");
if(isset($_POST['dispositivo'])) {
$dispositivo = $_POST['dispositivo'];
} else {
$dispositivo = 'valor1';
}
if(isset($_POST['momentoacceso'])) {
$momentoacceso = $_POST['momentoacceso'];
} else {
$momentoacceso = 'valor2';
}
echo "$dispositivo";
echo "$momentoacceso";
$sql = "INSERT INTO registroEstimote (dispositivo, momentoconexion) VALUES ('$dispositivo', '$momentoacceso');";
为什么它会在数据库中插入else值(valor1和valor2)?
答案 0 :(得分:1)
$ http.post和$ http.put方法接受任何JavaScript对象(或 字符串)值作为其数据参数。如果数据是JavaScript 默认情况下,它将转换为JSON字符串。
您忘记添加此行
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
$http({
method: 'POST',
url: 'http://thatsmyipv4address/MarkBeacons/www/test.php',
data: $.param({
'dispositivo': getDevice(),
'momentoacceso': getMomentoExacto()
}),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
.then(function (data) {
alert("Data Saved: " + data.response);
console.log(data);
}, function (error) {
//alert('error: ' + error);
console.log('error: ' + error.data);
});
答案 1 :(得分:0)
PHP没有像你期望的那样填充$ _POST。
POST数据可以实现:
$postdata = file_get_contents("php://input");
要获取正确的字段,您必须json_decode()
:
$request = json_decode($postdata);
$dispositivo = $request->dispositivo;
$momentoacceso = $request->momentoacceso;