【发布时间】:2018-01-06 19:52:02
【问题描述】:
这是我想要做的:
我有一个需要地理位置数据的 php 脚本。我在加载时执行 javascript 以确定我的坐标并使用 ajax/jQuery 发布这些结果(经纬度)。
$.ajax({
type: 'POST',
url: 'index.php',
data: {
lat: latitude,
long: longitude
},
success: function( data ) {
console.log( data );
}
});
脚本有效,但是,我没有在浏览器中获取坐标。 javascript 控制台显示正确的结果。奇怪的是,如果我这样做:
$lat = $_POST['lat'];
$lon = $_POST['long'];
$handle = "/tmp/fish";
$mode = "w";
$fp = fopen($handle, $mode);
fwrite($fp,$lat);
fwrite($fp,',');
fwrite($fp,$lon);
fclose($fp);
文件也会有正确的坐标结果。如果我这样做:
echo $_POST['lat'];
它将是空的。所以我可以通过文件 I/O 让它工作,但我宁愿只在脚本中处理它。在上述文件 I/O 之后,我必须通过表单操作执行第二个 php 脚本来打开文件并获取我需要的数据。 我错过了什么?
这是一个例子: HTML:
print "<pre>";
print_r($_POST);
print "</pre>";
Array
(
)
控制台:
<pre>Array
(
[lat] => 40.####
[long] => -82.####
)
</pre>
整个javascript:
<script type="text/javascript">
function geoFindMe() {
var output = document.getElementById("out");
function success(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
$.ajax({
type: 'POST',
url: 'index.php',
data: {
lat: latitude,
long: longitude
},
success: function( data ) {
console.log( data );
$("#lat").html(data['lat']);
$("#long").html(data['long']);
$("#lat").html("<b>" + data['lat'] + "</b>");
}
});
function error() {
output.innerHTML = "Unable to retrieve your location";
}
navigator.geolocation.getCurrentPosition(success, error);
}
</script>
现在我尝试了@Bradmage 的建议。代码:
$lat = $_POST['lat'];
$lon = $_POST['long'];
$handle = "/tmp/fish";
$mode = "w";
$fp = fopen($handle, $mode);
fwrite($fp,$lat);
fwrite($fp,',');
fwrite($fp,$lon);
fclose($fp);
cat fish
40.xxxxx,-82.xxxx
数据在文件中,我做了我的 fclose。那么:
$mode = "r";
$t = fopen($handle, $mode);
$r = fgetcsv($t, 1000, ",");
$r = print_array($r);
$lat = $r[0];
$long = $r[1];
$r[0] 和 $r[1] 为空。如果我让我的表单操作成为另一个 php 脚本,我在其中进行上述读取,我会得到数据。我完全被难住了。
【问题讨论】:
-
如果您的 javascript 控制台向您显示正确的值,那么您的
echo行正在工作,因为您的 ajax 回调正在记录脚本回显的数据。除非你的意思是你在其他地方做了一个console.log,但你没有显示 -
我需要那个回声显示在我的 HTML 正文中,但它不是。无论我是否有那个 echo 语句,控制台都会显示我的正确结果。我试图表明我可以在控制台中获得结果,但不能让它们显示在 HTML 流中。仅供参考,我从别人那里复制了 javascript,对此一无所知。我的专长在于 php。
-
所以使用 console.log(data) 你看不到从 php 中吐出什么?
-
你认为它会更新在加载的索引页面上准备好的PHP吗?最初加载的页面中的代码已经完成......它没有获取该数据。 Ajax 调用与初始页面加载无关。如果您希望它显示在当前页面中,那么您将不得不让 php 代码返回数据,并且您需要使用 JavaScript 显示它。
-
您是否尝试从 index.php 中回显内容并期望它们显示在页面本身而不是 ajax 响应中?您的问题不清楚,您提供了一个示例,例如“这是一个示例:HTML:”,然后使用一些 php 代码进行跟踪。请澄清你在做什么,在哪里做,你期望什么以及实际发生了什么。包含更多相关代码会有所帮助。
标签: javascript php post