试图将POST从JavaScript传递给PHP

时间:2014-11-06 14:53:23

标签: javascript php jquery mysql

几天来,我一直试图通过JavaScript将简单的POST调用传递给php脚本。我在网上进行了无数次搜索,没有任何积极的结果。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">

function successHandler(location) {
    var dataString = '?lat=' + location.coords.latitude + '&long=' + location.coords.longitude + '&accuracy=' + location.coords.accuracy;
    alert(dataString);
    if (location.coords.latitude == '0') {
    } else {
        alert("AJAX made");
        $.ajax({
            type: "POST",
            url: "updatepos.php",
            data: dataString,
            cache: false,
            success: function(html) {
                alert(html);
            }
        });
        setTimeout(navigator.geolocation.getCurrentPosition(successHandler),15000);
    }
}

function getLocation() {
    navigator.geolocation.getCurrentPosition(successHandler);
}

getLocation();

</script>

以上是我的JavaScript文件。数据字符串生成,并将其警告给我的浏览器。没问题。问题是,我的变量无法传递给PHP。

这是与JavaScript位于同一目录中的PHP。

<?php
include 'wp-load.php';
/*global $current_user;
get_currentuserinfo();

echo $current_user->user_login;*/

include('dbconnect.php');
global $current_user;
get_currentuserinfo();
$lat = $_POST['lat'];
$long = $_POST['long'];
$accuracy = $_POST['accuracy'];
/*$lat = $_GET['lat'];
$long = $_GET['long'];
$accuracy = $_GET['accuracy'];*/
$query = "UPDATE ltc_users SET lat='$lat',accuracy=$accuracy,lon='$long' WHERE name='$current_user->user_login'";
mysqli_query($GLOBALS['DB'],$query);
echo mysqli_error($GLOBALS['DB']);
echo $lat;
echo $long;
echo $accuracy;
echo $current_user->user_login;
?>

我可能会注意到,在脚本之前会返回mysql语法错误,因为它因为缺少变量而在php中回显。如果我使用$ _GET方法,只需在我的浏览器地址栏中输入数据进行测试,语法就有效。它无论出于何种原因都无法获取JavaScript变量。

2 个答案:

答案 0 :(得分:2)

您将字符串传递给jquery。当你这样做时,字符串将由jquery按原样发送出去。因为它只是一个简单的字符串,而不是一个键:值对,所以没有关键的PHP可以用来填充和填充$ _POST。

事实上,你不应该为ajax手动构建一串key:value对--jquery会接受一个数组/对象并为你完成所有这些:

var stuff = {
    lat : location.coords.latitude,
    long : location.coords.longitude,
    accuracy : location.coords.accuracy
}

$.ajax({
   data: stuff
});

答案 1 :(得分:0)

以下是您的代码与@Marc B

的结合
<script src = "http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" > </script>
<script type="text/javascript">

function successHandler(location) {

    if (location.coords.latitude == '0') {
    } else {
        alert("AJAX made ");
        $.ajax({
            type: "POST",
            url: "updatepos.php",
            data: {
              "lat":location.coords.latitude,
              "long":location.coords.longitude,
              "accuracy":location.coords.accuracy
            },
            dataType: "json",
            async:true,
            cache: false,
            success: function(html) {
                alert(html);
            },error: function(a,b,c){
                console.log(a.responseText);
            }
        });
        setTimeout(function(){navigator.geolocation.getCurrentPosition(successHandler);},15000);
    }
}

function getLocation() {
    navigator.geolocation.getCurrentPosition(successHandler);
}
$(function(){
  getLocation();
});

</script>
它在jsfiddle http://jsfiddle.net/y7f1vkej/中的代码似乎对我有用