无法使用 AJAX 将 JS 变量传递给 PHP

Posted

技术标签:

【中文标题】无法使用 AJAX 将 JS 变量传递给 PHP【英文标题】:Cannot pass JS variable to PHP using AJAX 【发布时间】:2017-10-01 20:16:46 【问题描述】:

我正在尝试获取用户的当前位置。

我有 JS 脚本来获取当前的纬度和经度,使用 AJAX 将 js 变量发送到 index.php

$(document).ready(function() 
if ("geolocation" in navigator)
    navigator.geolocation.getCurrentPosition(function(position)
            var userLat = position.coords.latitude;
            var userLong = position.coords.longitude;
            console.log(userLong);
            console.log(userLat);

            $.ajax(
              type: 'POST',
              url: 'index.php',
              data: 
              userLat : userLat,
              userLong : userLong
              ,
              success: function(data)
                
                  console.log(data);

                

            );

    );
else
    console.log("Browser doesn't support geolocation!");
);

然后我尝试在我的 index.php 中执行此操作:

echo $_POST['userLat'];
echo $_POST['userLong'];

什么都没有出现。提前致谢。

【问题讨论】:

在你浏览器的调试工具中,控制台有没有报错?发出了哪些网络请求以及这些请求中包含哪些数据?调试时,是否进行了 AJAX 调用?服务器的响应究竟是什么? 它显示正确的输出:console.log(userLong);控制台.log(userLat);没有其他错误。同样对于控制台,日志(数据)它显示整个页面代码,我不知道为什么。 嗯,它显示了该 AJAX 请求返回的任何内容。如果index.php 返回整个页面,那么它将显示整个页面。您到底在哪里寻找 AJAX 值?你不是在检查控制台日志响应吗? 是的,我正在检查控制台输出的 index.php。就像我说的,它在控制台输出中显示了 userLong 和 userLat 的正确值,但是当 console.log(data) 被调用时,它显示了整个页面的代码,而不是使用 AJAX 发送的数据。我不确定为什么会这样。 "it shows correct values in console output" - 那么到底是什么问题呢?您正在登录控制台,仅此而已。正确的数据在控制台中。那么有什么问题呢?你期待会发生什么?它显示整个页面,因为这是您请求页面时响应中的内容。有什么理由不应该这样做吗? 【参考方案1】:

什么都没有出现。

那是正确你永远不会通过浏览 index.php 得到任何东西,因为此时没有 POST ,AJAX 是内部的,显示 index.php 结果的唯一方法是您从中发送 ajax 调用的页面。

此时:

success: function(data)
            
              console.log(data);

            

您可以控制在哪里显示来自 index.php 的数据,例如 alert(data)document.getElementById("someelement").innerhtml=data; 等等。

【讨论】:

【参考方案2】:

为 ajax 定义和返回 dataType 可能会有所帮助。

将此添加到您的ajax 选项列表中

 dataType: 'json',

然后在 index.php 中编码并回显一个 json 字符串。删除线

echo $_POST['userLat'];
echo $_POST['userLong'];

替换为

echo json_encode($_POST);

成功函数中的console.log(data); 应该显示一个包含两个项目的对象:“userlat”和“userLong”以及每个项目的关联值。或者如果$_POST 有这两个项目,它应该。

如果您想要更新浏览器屏幕,您必须使用 data 并使用它来修改 DOM。

【讨论】:

现在我的 AJAX 代码如下所示: $.ajax( type: 'POST', url: 'index.php', dataType: 'json', data: userLat : userLat, userLong : userLong , 成功:function(data) console.log(data); );在 index.php 我有 echo json_decode('$_POST');仍然没有“回显”任何东西和 console.log(data) 的控制台日志;现在是空的。 应该是json_encode,而不是json_decode。另外,删除$_POST 周围的单引号。使用这个echo json_encode($_POST); 处理 ajax 请求的函数中的 echo 不会发送到浏览器输出。它被发送到您的 ajax 语句的 success 函数。

以上是关于无法使用 AJAX 将 JS 变量传递给 PHP的主要内容,如果未能解决你的问题,请参考以下文章

AJAX 变量传递给 SQL 但不传递给 PHP

Laravel 使用 AJAX 将 Javascript 变量传递给 PHP 并检索那些

如何使用 Javascript 和 Ajax 将 HTML 单选按钮值传递给 PHP 变量?

将 AJAX 变量传递给 PHP

无法使用 ajax 将多维数组传递给 php

如何使用 jQuery 将多个变量传递给 PHP