关于 ajax 将数据发布到 PHP
Posted
技术标签:
【中文标题】关于 ajax 将数据发布到 PHP【英文标题】:About ajax post data to PHP 【发布时间】:2018-01-23 14:41:25 【问题描述】:我是 Ajax 的新手,我知道当我想将数据传递给 php 文件时我需要使用 Ajax,但我不确定 Ajax 是否可以像我编写的代码那样使用。如果不能,任何人都可以帮助我吗?因为我想使用 html5 地理位置来获取用户位置。我之前尝试过geoplugin,但我得到的IP总是服务器IP而不是用户IP,我尝试在这里询问geoplugin但没有用。我已经尝试过这个 html5 地理位置来显示我的 lon 和 lat,它是正确的,但我想将变量传递给另一个 PHP 文件以计算从 mysql 获取的数据的最近距离。
在 index.php 中
<script>
$(document).ready(function()
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition(showLocation);
else
$('#location').html('Geolocation is not supported by this browser.');
);
function showLocation(position)
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
$.ajax(
type:'POST',
url:'index1.php',
data:'latitude='+latitude+'&longitude='+longitude
);
</script>
在 index1.php 中
<?php
session_start();
$link=mysqli_connect("localhost","id2135226_ukwai1203","ukwai1203");
mysqli_select_db($link,"id2135226_demo");
$lat=$_POST['latitude'];
$lon=$_POST['longitude'];
$sql = "select branch_id,(6371 * 2 * ASIN(SQRT( POWER(SIN(($lat -
branch_lat)*pi()/180/2),2)+COS($lat*pi()/180
)*COS(branch_lat*pi()/180)*POWER(SIN(($lon-branch_lon)*pi()/180/2),2))))
as
distance From Branch ORDER BY distance ASC LIMIT 1";
$res=mysqli_query($link,$sql);
while($row=mysqli_fetch_array($res))
$_SESSION['location']=$row['branch_id'];
?>
<script>
window.location="http://ukwai1203.000webhostapp.com/fyp/user/shop.php";
</script>
<?php
?>
【问题讨论】:
Have you watched the AJAX request / response in the browser's developer tools? Have you included the jQuery library in the project? Are there any errors reported? Are you running this on a web-server? @JayBlanchard 没有错误,只是一个空白页,我把这个文件放在一个虚拟主机服务器上 @JayBlanchard 忘记添加库,但添加后仍然是空白页 @JayBlanchardi 将 为什么不应该是空白页?其中唯一的 HTML 是<script>
元素,您的 JS 只发出 Ajax 请求:它对响应不做任何事情,也不向页面写入任何内容。
【参考方案1】:
将您的代码更改为:
function showLocation(position)
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
$.ajax(
method:"POST",
url:"index1.php",
data:
latitude : latitude,
longitude : longitude
);//ajax end
//function end
考虑使用 Eclipse 之类的 IDE 来帮助您发现缺少的括号等。 并且在通过修改旧代码检查库版本(如 jquery 版本)工作时。
【讨论】:
这读起来像是一个找不同的游戏,而不是一个答案。你改变了什么?为什么要解决问题? (看起来您建议让 jQuery 构建 POST 正文而不是手动执行……这是一个很好的最佳实践,但对解决问题没有帮助)。 @Quentin 在投反对票和发布废话之前请仔细阅读。贴出的代码有不平衡的括号,我认为解决这个问题的方法是使用 IDE 而不是指向它所在的位置。您还可以在代码中找到 cmets 的更改点。 您可以通过说“您的代码中有一个额外的
需要删除”来更清楚地解释这一点。 (这仍然不能解决问题,因为 HTTP 响应仍然被忽略)。
请注意,代码中额外的右括号表示代码之前未手动构造数据的状态。
但是 OP 对响应不感兴趣(他可能应该),因为他正在使用坐标获取分支并将其存储在会话中以上是关于关于 ajax 将数据发布到 PHP的主要内容,如果未能解决你的问题,请参考以下文章