gpt4 book ai didi

javascript - 将数组元素从javascript传递到php

转载 作者:行者123 更新时间:2023-11-29 20:54:30 25 4
gpt4 key购买 nike

我正在尝试将数组的 javascript 元素传递给 php 进行处理,如下所示:

for(var i=0;i<points.length;++i){
var xmlhttp = new XMLHttpRequest();
var distancesObject = null;
lat = points[i][LAT];
lng = points[i][LNG];
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
if(xmlhttp.response!=null){
distancesObject = JSON.parse(xmlhttp.response);
}
}
};
xmlhttp.open("GET", "Distances.php?lat=" + lat + "&lng=" + lng, true);
xmlhttp.send();
}

它应该遍历数组的每个元素并返回对象,如果它存在于数据库中,但它返回 null,即使我确定第一个值存储在数据库中。它仅在我传递点 [0]、点 [1] 之类的值时才有效。PHP代码是:

<?php
$latitude = $_GET['lat']; //"47.158857";
$longitude = $_GET['lng']; // "27.601249"
$query = "SELECT pharmacyDistance, schoolDistance, restaurantDistance, busStationDistance FROM distances WHERE lat='$latitude' and lng='$longitude'";
$result = mysqli_query($dbc,$query);
$count = mysqli_num_rows($result);
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
$json_array = json_encode($row);
if($json_array!=null){
echo $json_array;
}
mysqli_close($dbc);
?>

我做错了什么吗?

最佳答案

请不要那样做。真的。将所有数组项添加到您的网址中并仅执行一个 请求,您将在其中查询所需的所有内容并返回一个列表。处理响应中的列表。像(从我的头顶):

var urlParams = [];

points.forEach(function(point) {
urlParams.push("lat[]=" + point.LAT + "&lng[]=" + point.LNG);
});

var xmlhttp = new XMLHttpRequest();
var distancesObject = null;

xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
if(xmlhttp.response!=null){
distancesObject = JSON.parse(xmlhttp.response);
}
}
};

xmlhttp.open("GET", "Distances.php?" + urlParams.join("&"), true);
xmlhttp.send();

在 PHP 中:

$whereClause = "";

for ($i = 0; $i < count($_GET['lat']); $i++) {
$whereClause.= "(lat='" . $_GET['lat'][$i] . "' and lng='" . $_GET['lng'][$i]. "') and ";
}

$query = "SELECT pharmacyDistance, schoolDistance, restaurantDistance, busStationDistance FROM distances WHERE " . substr($whereClause, 0, (strlen($whereClause) - 4)); // Substr to remove last ' and' from where clause

$result = mysqli_query($dbc,$query);
$count = mysqli_num_rows($result);
$distances = array();
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
$distances[] = $row;
}

$json_array = json_encode($distances);
if($json_array!=null){
echo $json_array;
}
mysqli_close($dbc);

然后您将得到一份 distances 格式的 json 列表,并且在您的数据库中只有一次命中。此外,在 for 循环中调用 ajax 对您的应用来说是不健康的,它会打开各种并行异步请求,一团糟。

查询大致如下所示:

SELECT ... FROM ... WHERE (lat='1' and lng='1') and (lat='2' and lng='2') and ...

我没有测试这些代码,也有一段时间没有玩 PHP,所以我希望代码没问题,请原谅任何错别字或语法错误。

关于javascript - 将数组元素从javascript传递到php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50022894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com