PHP MySQL JS AJAX -循环问题


PHP MySQL JS AJAX - Loop issue

我有PHP循环。我从记录中获取id, lat, lon数据,将其传递给脚本进行一些计算,然后将此数据传递给AJAX,这将保存MySQL DB中计算的结果,如果成功,则将添加确认文本行到结果div。

我的代码(我确实修改了它以保持对问题的关注)

<div id="distance_results"></div>
<?php
        $result = $mysqli->query("SELECT * FROM test")
        while($row = $result->fetch_array()) {
        $id = $row['id'];   
        $city = $row['city'];   
        $lat = $row['lat'];
        $lon = $row['lon'];
        $driving_from = "51.528308,-0.3817765";
        $driving_to = "$lat,$lon";
?>
<script>
    var id = '<?php echo $id ?>';
    var city = '<?php echo $city ?>';
    var start = '<?php echo $driving_from ?>';
    var end = '<?php echo $driving_to ?>';
   // code
    directionsService.route(request, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
    // code
    var mi = response.routes[0].legs[0].distance.value;
            console.log(id);
            console.log(city);
            console.log(mi);
//Ajax Begin
            $.ajax({
            type: 'post',
            url: 'test-dc-upd.php',
            data: {'updateid': id, 'distance': mi},
            success: function() { 
            html="Distance between London and " + city  + " is " + mi;
            $("#distance_results").append("<p>"+html+"</p>");
                }
            });
 //Ajax End
} else {}
});  

</script>

<?php } ?>

AND CODE FOR "test-dc-up .php"

$id = $_POST['updateid'];
$distance = $_POST['distance'];
$result = $mysqli->query("UPDATE test SET distance='$distance' WHERE id='$id' LIMIT 1");

PHP循环遍历MySQL DB但是当我看到console:

根据纬度/经度计算'mi'值;

问题:

1)'id'和'city'的值保持不变(循环中最后一条记录的值);

2) AJAX只更新循环中最后一条记录的值

所以很明显,这个循环有一些问题。

有什么建议我做错了吗?

修改这个$("<p>"+ html +"</p>").append("#distance_results");

$("#distance_results").append("<p>"+ html +"</p>");
你的jquery代码是错误的。首先,你必须把选择器和附加函数的html代码。

Nita,将success函数改为:

success: function() { 
    html="Distance between CITYX and " + city  + " is " + mi;
    $("<p>"+ html +"</p>").append("#distance_results");  
    }
});

success: function() {
        html="Distance between CITYX and " + city  + " is " + mi;
        $("#distance_results").append(<p>"+ html +"</p>);
        // this will append the dynamic content to #distance_results
    }
});

解释:

要放一个动态内容是一些html对象,你必须首先准备然后选择HTML对象并将内容放入其中。

在一个循环调用ajax请求不是一个好的做法,我们可以很容易地传递数组值javascript使用函数内爆像这样

这个内爆函数适用于一维数组,

 var ar = <?php echo '["' . implode('", "', $ar) . '"]' ?>;

对于您的问题,您需要为结果创建一个多维数组,如下所示…

<?php
    $result = $mysqli->query("SELECT * FROM test");
    $arr= array();
    while($row = $result->fetch_array()) {
   $arr[]=array('id'=>$row['id'],'city'=>$row['city],'lat'=>$row['lat']...etc);
}
  ?>

之后,你可以像这样将数组中的每一项传递给javascript

var idArray= <?php echo '["' . implode(', ', array_column($arr, 'id')); . '"]' ?>;
   var cityArray= <?php echo '["' . implode(', ', array_column($arr, 'city')); . '"]' ?>;

你可以在javascript中获得每个标签作为数组,然后使用singajax请求将所有javascript数组传递给PHP脚本。并在服务器端操作。

你的ajax请求是这样的

 $.ajax({
        type: 'post',
        url: 'test-dc-upd.php',
        data: {
          'idArray':idArray,
          'cityArray':cityArray, //etc you need pass all array like this 
        },
        success: function(data) { 
            // your success code goes here
            }
        });

注意array_column()函数只支持php 5.3或以上版本

我设法做到这一点不同的方式,我希望(但距离和旅行时间已计算超过3000个地点)。

所以我所做的是确保mysql (test-dc.php)找到距离和旅行时间没有计算的记录,进行计算,用Ajax更新记录。Ajax再次打开(test-dc.php),循环遍历所有结果,直到没有其他需要计算的结果为止。必须刷新几次,但没关系,任务完成。

Mysql查询的调整:

$result = $mysqli->query("SELECT * FROM test WHERE distance='' LIMIT 1")

和AJAX:

success: function() { 
   html="Distance between London and " + city  + " is " + mi;
   $("#distance_results").append("<p>"+html+"</p>");
   location.href = "test-dc.php"
}

这样就成功了,但我仍然相信有更好的方法可以达到同样的结果,如果有人能帮我想出办法,我会很高兴的。