几天来,我一直试图通过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变量。
答案 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/中的代码似乎对我有用