将php变量传递给xmlhttp.responseText

时间:2013-06-13 14:08:30

标签: php javascript ajax xmlhttprequest

这里没有找到这个确切的情况,所以我想我会问。我有一些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所在页面的一个组件不起作用。

3 个答案:

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