将 php 变量传递给 xmlhttp.responseText
Posted
技术标签:
【中文标题】将 php 变量传递给 xmlhttp.responseText【英文标题】:Passing php variable to xmlhttp.responseText 【发布时间】:2013-06-09 23:10:30 【问题描述】:这里没有找到这个确切的情况,所以我想我会问。我有一些使用 AJAX 的 javascript 尝试调用 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 所在的页面组件不起作用。
【问题讨论】:
您是否尝试在传递变量$lat
和 $lon
之前打印它们?
就像在屏幕上显示它们以确保它们保存数据?
是的!因为,如果没有返回行,它将为空。
变量$_GET['bus']
似乎没有设置,因为在GET
请求期间没有传递。
【参考方案1】:
当我提醒
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 注入持开放态度。
【讨论】:
【参考方案2】:当您通过GET
方法发送请求时,您需要在URL中手动添加参数bus
。所以,重写
xmlhttp.open("GET","php/location.php",true);
到
xmlhttp.open("GET","php/location.php?bus=value",true);
【讨论】:
【参考方案3】:您应该在 PHP 文件 URL 中传递“bus”。
【讨论】:
以上是关于将 php 变量传递给 xmlhttp.responseText的主要内容,如果未能解决你的问题,请参考以下文章
通过 ajax 将 Javascript 变量传递给 PHP
Laravel 使用 AJAX 将 Javascript 变量传递给 PHP 并检索那些
将 php 变量传递给 xmlhttp.responseText