通过ajax将坐标传递到php服务器端,并在处理后检索到javascript


Pass coordinates via ajax to php server-side, and retrieve to javascript after they were processed

我想通过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应该提供什么吗。我概述的这个解决方案并没有使用它,如果需要的话,也许还有更多的工作来弄清楚应该在哪里发生。

希望这能帮助