【问题标题】:Ajax POST in Javascript - missing dataJavascript 中的 Ajax POST - 缺少数据
【发布时间】: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


【解决方案1】:

如果您的控制台显示正确的值,则它们被正确传回。您需要更多代码来更新您的页面。

说你必须要元素:

<div id="lat"></div>
<div id="long"></div>`

console.log( data ); 下你需要类似..

$("#lat").html(data['lat']);
$("#long").html(data['long']);

然后,您可以将两个 div 放置在页面上任何您希望数字显示的位置。

编辑

如果你不熟悉 jQuery(如果你使用 .ajax,我假设你会使用它),了解一些 jQuery 基础知识。

$("") 得到一个对象。

#lat 是元素 ID。

.html() 将 html 放置在 $("#lat") 检索到的元素中。所以你可以使用$("#lat").html("&lt;b&gt;" + data['lat'] + "&lt;/b&gt;");

【讨论】:

  • 您好,感谢您的回复。当我按照指示使用您的代码时,我的 div 元素中出现“未定义”。我将编辑以提供上面的整个 js。
  • 另外澄清一下,我不一定想在 div 元素中显示它,但我希望我的 php 代码能够获取它并将其保存在数据库中。
  • 啊对不起,我的印象是你不知道如何修改 html 元素。我想我现在明白了。我不明白你为什么以及从哪里调用第二页?为什么不能把数据库代码和 $fp = fopen($handle, $mode); ?
  • 这对我来说很奇怪。我可能需要更好地掌握代码的运行方式以及排序问题。我试过你的建议。为简单起见,上面添加了代码。
  • 回到基础。你想达到什么目的?将您的位置放入数据库?页面加载 -> ajax(lat,long) -> 添加到数据库 -> ajax 响应代码(数据)。是这样吗?
【解决方案2】:

非常快速的模型。这会将坐标添加到您的表单中,因此您只需将所有数据提交一次即可。

<head>
<script>
$(document).ready(function(){
    var latitude  = position.coords.latitude;
    var longitude = position.coords.longitude;

    $("#lat").val(latitude);
    $("#long").val(longitude);
});
</script>
</head>
<body onload="geoFindMe()">

<form action="..">
    <input type="text" name="var1">
    <input type="text" name="var2">
    <input type="hidden" id="lat" name="lat" />
    <input type="hidden" id="long" name="long" />

    <input type="submit" />
</form>

</body>

现在您的脚本将拥有一切。

<?php
    $var1 = $_POST[...];
    $var2 = $_POST[...];
    $lat = $_POST['lat'];
    $lon = $_POST['long'];

    $handle = "/tmp/fish";
    $mode = "w";
    $fp = fopen($handle, $mode);
    fwrite($fp,$var1);
    fwrite($fp,',');
    fwrite($fp,$var2);
    fwrite($fp,',');
    fwrite($fp,$lat);
    fwrite($fp,',');
    fwrite($fp,$lon);   
    fclose($fp);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2012-09-21
    • 2018-08-05
    • 2015-07-02
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多