Angular没有正确发送http帖子

时间:2017-04-12 08:32:28

标签: javascript php jquery mysql angularjs

我在函数中有这个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)?

2 个答案:

答案 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;