我只是通过命令将我的lat,lng传递给mysql数据库。以下是将数据发布到数据库的代码:
for (var i = 0; i < latLngs.length; i++) {
$.post('send.php', {
username: name,
latitude: latLngs[i].lat,
longitude: latLngs[i].lng
}, function(data) {
$('#result').html(data);
});
}
和send.php:
<?php
$name = $_POST['username'];
$lat = array($_POST['latitude']);
$arrlength = count($lat);
$lnt = array($_POST['longitude']);
$link = @mysql_connect("localhost","root","") or die("cannot connect");
@mysql_select_db("beta") or die("cannot select db");
for ($x = 0; $x <$arrlength; $x++) {
$query="insert into belcheer(username,lat, lng) values('$name','$lat[$x]','$lnt[$x]')";
@mysql_query($query) or die("cannot run query");
}
@mysql_close($link);
?>
这是来自用户input from user的原始数据,但数据库中的数据的顺序不正确not ordered。我该如何解决这个问题?
已更新! 当我将数据插入数据库时,它成倍增加。我的意思是我的数组长度为4但数据库记录为16.为什么会发生?
for ($x = 0; $x <count($lat); $x++){
$query="INSERT INTO belcheer(username,lat, lng) VALUES('user','$lat[$x]','$lng[$x]')";
@mysql_query($query) or die("cannot run query");
}
答案 0 :(得分:2)
浏览器使用连接池向服务器发送请求,因此多个帖子/请求将同时发生,服务器首先处理后续请求,这就是您所看到的。
如果每篇帖子都等待上一篇文章的完成,您只能强制执行正确的订单。
由于您还实施了send.php
,因此您最好的选择是在一个请求中发送所有数据:
<强>的JavaScript 强>
$.post('send.php', { username: name, latLngs: JSON.stringify(latLngs) }, function(data) {
$('#result').html(data);
});
<强> PHP 强>
$latLngs = json_decode($_POST['latLngs']);
// Now you can work with $latLngs array in PHP
答案 1 :(得分:1)
你正在遇到这样一个事实:这些POST调用同时执行 - 好吧,几乎同时执行 - 并且由服务器按照发生的顺序进行处理。< / p>
您需要找到一种方法来确保$.post
调用按顺序(一个接一个)按您想要的顺序进行。
答案 2 :(得分:1)
这可能是因为$ .post是异步执行的。这意味着即使您按顺序提出请求,也不意味着服务器将按照发送的顺序接收它们。
您最好的选择是在您发送整个阵列的位置发出单个请求,然后处理阵列服务器端
答案 3 :(得分:1)
将您的函数转换为同步,如下所示:
function sendGeo(latLngs,index){
if (latLngs[index]!== undefined)
{
$.post('send.php', {username:name,
latitude:latLngs[index].lat,
longitude:latLngs[index].lng},
function(data){
$('#result').html(data);
sendGeo(latLngs,index++); //use the callback to send next data
});
}
}
sendGeo(latLngs,0);