我想通过Ajax将一些坐标从javascript(客户端)传输到php(服务器端),经过处理(过滤器等)后,我想将结果检索到javascript以供使用。传递到php的过程正在进行,但我不知道如何从php获得和使用处理后的结果。非常感谢您的帮助。
php部分的脚本是:
$dbconn = pg_connect ("host=localhost port=5432 user=postgres password=xxxxxxx dbname=yyyyyyyy") or die('can not connect!'.pg_last_error());
//The nearest point of Start point
$ss='';
if (isset($_POST['kuldes_st'])){
$kuldes=$_POST['kuldes_st'];
$latk=$_POST['lat_st'];
$lngk=$_POST['lng_st'];
$query = "SELECT ST_X(the_geom), ST_Y(the_geom) FROM tbl_mypoints ORDER BY ST_Distance(the_geom, ST_GeomFromText('POINT($latk $lngk)', 4326)) LIMIT 1";
//$result = pg_query($query) or die('The query failed: ' . pg_last_error());
$result = pg_query($dbconn,$query);
if (!$result) {
die('The query failed: ' . pg_last_error());
}
else {
while ($line =pg_fetch_row($result))
{
$latitude=$line[0];
$longitude =$line[1];
$ss .= "L.latLng(".$latitude.", ".$longitude.")";
}
}
echo json_encode($ss);
}
Javascript代码:
map.on('click', function(e) {
var container = L.DomUtil.create('div'),
startBtn = createButton('Start from this location', container),
destBtn = createButton('Go to this location', container);
nearestBtn = createButton('Find and go to nearest parking', container);
//Start
L.DomEvent.on(startBtn, 'click', function() {
control.spliceWaypoints(0, 1, e.latlng);
var lats=e.latlng.lat;
var lngs=e.latlng.lng;
$.ajax({
url : 'index.php',
type : 'POST',
async : true,
data : { 'kuldes_st':1,
'lat_st': lats,
'lng_st': lngs
},
success: function(data,response) {
if (response == 'success') {
alert("Post working fine");
alert(response);
console.log(data);
} else {
alert("Post don't working");
console.log(data);
}
}
});
map.closePopup();
});
我认为主要的问题是如何使用返回值。在index.php文件中,您可以返回不带html标记的值。例如,如果您想返回数字数组,只需使用以下代码:
echo implode($array,",");
ajax函数返回的数据如下所示:
1,2,4,2
您可以将这个字符串拆分为一个javascript数组,代码如下:
var result = data.split(",");
之后,您可以在jquery代码中的任意位置使用数组结果。
我的PHP有点生疏,但我认为问题是您返回的字符串不是JSON,而是试图将其打包为JSON。
我想你想要更像的东西
$ss = array();
while ($line =pg_fetch_row($result))
{
$latlng = array();
$latlng["lat"] = $line[0];
$latlng["lng"] = $line[1];
array_push($ss,$latlng);
}
echo json_encode($ss)
如果我的PHP错了,请原谅,但希望你能从中得到这个想法。在这一点上,服务器将返回的东西应该看起来像真正的JSON(
[
{"lat":46.5,"lng":24.5},
{"lat":46.5,"lng":24.5},
...
]
然后在javascript中,您可以像处理数组一样处理它。
var latitudeOfTheFirstEntry = data[0].lat;
var longitudeOfTheSecondEntry = data[1].lng;
你知道L.latLng
应该提供什么吗。我概述的这个解决方案并没有使用它,如果需要的话,也许还有更多的工作来弄清楚应该在哪里发生。
希望这能帮助