【问题标题】:Updating Location on Google Maps - API在 Google 地图上更新位置 - API
【发布时间】:2017-07-21 12:32:18
【问题描述】:

目前正在从事一个小型项目,无法解决我在通过 API 更新 Google 地图上的位置时遇到的问题。

快速运行(这部分工作正常) - 有一个带有一些 lat 和 long 值的 MySQL 数据库 - 单击一个按钮我使用 Ajax 来点击一个 PHP 脚本,该脚本从数据库中提取一个随机的 lat 和 long 并编码为 json。 - 我成功检索了 lat 和 long 值,并可以提醒它们或将它们插入页面的任何位置。

这就是我的问题所在。我正在使用 Google Maps API sn-p,它工作得非常好。它显示地图,如果我在单击按钮时触发的函数中硬编码纬度和经度值,它会将地图重新​​居中到新位置。但是,当我通过 Ajax 脚本插入 lat 和 long 值时,它不会更新位置。

这是我的代码(只有前端 jQuery。PHP 和 ajax 控制器工作。)

<script>
var map;
function initialize()
{
map = new google.maps.Map(document.getElementById('map-canvas'), {
center: new google.maps.LatLng(48.1293954,12.556663),//Setting Initial     Position
zoom: 2
});
}


function newLocation(newLat,newLng)
{
map.setCenter({
    lat : newLat,
    lng : newLng
});
}

google.maps.event.addDomListener(window, 'load', initialize);

$(document).ready(function ()
{
$("#1").on('click', function ()
{

// Get lat and long new values from MySQL
$.ajax({
  type: "POST",
  url: 'core/ajax_controller.php?c=controller',
  data: $(this).serialize(),
  dataType: 'json',
  success: function(data) {

    newLocation(data[0],data[1]);
    map.setZoom(15);

}

});

});
});
</script>

从上面的例子。例如,如果我警告或打印包含 lat 值的数据 [0],它会将值显示为纯文本 - “26.1725364”。但是,当将其添加到地图函数“newLocation”时,它似乎并没有传递给该函数,而是重新定位地图。

但是,如果我删除 Ajax 并仅使用以下内容,以及硬编码的纬度和经度坐标。可以,每次点击按钮都会更新地图中心。

$("#1").on('click', function ()
{
    newLocation(12.12345678,12.12345678);
    map.setZoom(15);

所以,看来我的问题是在另一个函数中以某种方式访问​​第二个 javascript 函数“newLocation”。

有没有办法正确地做到这一点?

谢谢

【问题讨论】:

  • 这只是一个快速的猜测......但是在成功回调中尝试:newLocation(data[0].lat,data[0].lng);。或newLocation(data.lat,data.lng);
  • 谢谢@LouysPatriceBessette,不过不开心。这些问题似乎与抓取数据的功能无关。正如我所说,如果我移动 newLocation(12.12345678,12.12345678);在 ajax 请求之外,它使用硬编码值工作。所以这个错误可能与在当前函数内部调用该函数有关。
  • 在回调中添加:console.log(JSON.stringify(data)); 并发布结果。 ;)
  • @LouysPatriceBessette - ["-33.847973","150.6517684"]

标签: php jquery ajax google-maps google-maps-api-3


【解决方案1】:

来自 Ajax 请求的 data 结果是一个字符串数组。

所以一个快速的解决方法是:

success: function(data) {

    newLocation(parseFloat(data[0]),parseFloat(data[1]));
    map.setZoom(15);

}

【讨论】:

  • 解决了!谢谢您的帮助。所以,我没有意识到该函数读取它与仅警告它或将其作为纯文本插入页面不同。
  • 你也可以让你的服务器发送data,像{lat:-33.847973,lng:150.6517684}这样以json格式形成,然后像这样直接传递给你的函数:newLocation(data)。但这是代码效率的谈话。 ;) 我经常说,如果它没有坏,就不要修复它!大声笑
  • 考虑接受答案,也许是赞成! ;)
  • 当然。这是另一种方法,可能是我在进步时进行的迭代。
猜你喜欢
  • 2017-01-02
  • 1970-01-01
  • 2014-06-16
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多