这里没有找到这个确切的情况,所以我想我会问。我有一些JavaScript,使用AJAX,试图调用PHP文件,执行PHP脚本,并通过xmlhttp.responseText返回连接的PHP变量,然后提醒该响应。
JS
function queryDB() {
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState===4 && xmlhttp.status===200)
{
alert(xmlhttp.responseText);
}
}
xmlhttp.open("GET","php/location.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send();
}
PHP
<?php
$con = mysql_connect("<THIS DATA HIDDEN FOR SECURITY PURPOSES, IT IS CORRECT");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("gpstracks", $con);
$bus = $_GET['bus'];
$query = "SELECT lat, lon from tracksarchive where runnerid = '$bus' ORDER BY time DESC LIMIT 1;";
$latlon = mysql_query($query);
while ($row = mysql_fetch_array($latlon, MYSQL_ASSOC)) {
$lat = $row['lat'];
$lon = $row['lon'];
}
$result = $lat . ", " . $lon;
echo $result;
mysql_close($con);
?>
是的,我知道mysql_已被mysqli_取代,我稍后会处理。当我自己执行PHP时(使用表单提交) - 它会从表中显示正确的值,但是当我提醒xmlhttp.responseText时 - 我只得到逗号和空格 - 没有传递变量。知道我做错了什么吗?非常感谢帮助。
旁注:我知道现在AJAX调用的首选方法是jQuery - 但是当我使用jQuery时,这个JavaScript所在页面的一个组件不起作用。
答案 0 :(得分:3)
当我提醒
xmlhttp.responseText
时 - 我只得到逗号和空格 - 没有传递变量
您没有正确执行 GET ;在您的 JavaScript 中
xmlhttp.open("GET","php/location.php",true);
即。您在没有URI查询字符串的情况下执行了 GET 请求。
在你的 PHP 中
$bus = $_GET['bus'];
即。你是从URI查询字符串中获取这些数据,除非没有传递,所以这将是空的,所以
$query = "SELECT lat, lon from tracksarchive where runnerid = '$bus' ORDER BY time DESC LIMIT 1;";
无法按预期工作。
你真的想做像
这样的事情xmlhttp.open(
"GET",
"php/location.php?bus="+window.encodeURIComponent(foobar),
true
); // foobar your value for `bus`
此外,您需要对$bus
进行一些服务器端清理,因为您可以接受SQL注入。
答案 1 :(得分:0)
您应该在PHP文件URL上传递“bus”。
答案 2 :(得分:0)
当您通过GET
方法发送请求时,需要手动将参数bus
添加到URL。所以,重写
xmlhttp.open("GET","php/location.php",true);
到
xmlhttp.open("GET","php/location.php?bus=value",true);