最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Passing php variable to xmlhttp.responseText - Stack Overflow

programmeradmin2浏览0评论

Haven't found this exact situation on here, so I figured I'd ask. I have some JavaScript that, using AJAX, is attempting to call a PHP file, execute the PHP script, and return a concatenated PHP variable through xmlhttp.responseText, then alert that response.

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);
?>

Yes, I know that mysql_ has been replaced by mysqli_, I'll deal with that later. When I execute the PHP on its own (using a form submit) - it displays the correct values from the table, but when I alert the xmlhttp.responseText - I only get the ma and space - no passed variables. Any idea what I'm doing wrong? Help is much appreciated.

Sidenote: I know the preferred method for AJAX calls these days is jQuery - but a ponent of the page this JavaScript is on doesn't function when I use jQuery.

Haven't found this exact situation on here, so I figured I'd ask. I have some JavaScript that, using AJAX, is attempting to call a PHP file, execute the PHP script, and return a concatenated PHP variable through xmlhttp.responseText, then alert that response.

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);
?>

Yes, I know that mysql_ has been replaced by mysqli_, I'll deal with that later. When I execute the PHP on its own (using a form submit) - it displays the correct values from the table, but when I alert the xmlhttp.responseText - I only get the ma and space - no passed variables. Any idea what I'm doing wrong? Help is much appreciated.

Sidenote: I know the preferred method for AJAX calls these days is jQuery - but a ponent of the page this JavaScript is on doesn't function when I use jQuery.

Share Improve this question edited Jun 13, 2013 at 15:37 Mark D. Medaugh asked Jun 13, 2013 at 14:08 Mark D. MedaughMark D. Medaugh 311 silver badge3 bronze badges 4
  • did you try printing the variables $lat and $lon before passing them? – Kevin Commented Jun 13, 2013 at 14:11
  • As in, displaying them to the screen to ensure they hold data? – Mark D. Medaugh Commented Jun 13, 2013 at 14:14
  • yes! coz, it'll be empty if there is no row returned. – Kevin Commented Jun 13, 2013 at 14:15
  • it seems that the variable $_GET['bus'] is not set since it is not passed during the GET request. – Kevin Commented Jun 13, 2013 at 14:22
Add a ment  | 

3 Answers 3

Reset to default 3

when I alert the xmlhttp.responseText - I only get the ma and space - no passed variables

You're not performing your GET properly; in your JavaScript you have

xmlhttp.open("GET","php/location.php",true);

i.e. you performed a GET request without a URI query string.

In your PHP you have

$bus = $_GET['bus'];

i.e. you're GETting this data from the URI query string, except none was passed, so this will be empty, so

$query = "SELECT lat, lon from tracksarchive where runnerid = '$bus' ORDER BY time DESC LIMIT 1;";

doesn't work as expected.

You really wanted to do something like

xmlhttp.open(
    "GET",
    "php/location.php?bus="+window.encodeURIComponent(foobar),
    true
); // foobar your value for `bus`

Further, you'll need to do some server-side sanitisation of $bus, as it stands you're open to SQL injection.

As you send request by GET method, you need to manually add the parameter bus to the URL. So, rewrite

xmlhttp.open("GET","php/location.php",true);

to

xmlhttp.open("GET","php/location.php?bus=value",true);

You should pass "bus" in on the PHP file URL.

发布评论

评论列表(0)

  1. 暂无评论