Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在地理编码器中返回未定义的函数_Javascript_Jquery_Google Maps - Fatal编程技术网

Javascript 在地理编码器中返回未定义的函数

Javascript 在地理编码器中返回未定义的函数,javascript,jquery,google-maps,Javascript,Jquery,Google Maps,我使用Google maps v3 geocoder对地址进行地理编码,然后使用getJSON将2个坐标点从jQuery文件传递到PHP文件 问题:但是,我注意到执行地理编码功能的函数不断返回未定义的值!因此,PHP文件接收一个未定义的变量。我哪里出错了 jQuery代码 var search_latlng = geocodeAddress(search_location); console.log(search_latlng); $.getJSON('/main/get_places', {

我使用Google maps v3 geocoder对地址进行地理编码,然后使用
getJSON
将2个坐标点从jQuery文件传递到PHP文件

问题:但是,我注意到执行地理编码功能的函数不断返回未定义的值!因此,PHP文件接收一个未定义的变量。我哪里出错了

jQuery代码

var search_latlng = geocodeAddress(search_location);
console.log(search_latlng);

$.getJSON('/main/get_places', {search_location: search_latlng}, function(json){
        $("#result_listing").html('');
 .
 .
 .
地理编码器JS功能

function geocodeAddress(address) {

    var latlng = new Array(2);

    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            latlng[0] = results[0].geometry.location.lat();
            latlng[1] = results[0].geometry.location.lng();
            return latlng;
        } else {
            console.log("Geocode was not successful for the following reason: " + status);
        }
    });
}

您不能通过对Google代码的回调从该函数返回值。这毫无意义;“geocode()”函数是异步的。外部函数将在回调运行时返回

正确的方法是模仿Google API本身:给函数一个回调参数,然后从那里执行“之后”的工作:

function geocodeAddress(address, callback) {

    var latlng = new Array(2);

    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            latlng[0] = results[0].geometry.location.lat();
            latlng[1] = results[0].geometry.location.lng();
            callback(latlng); // call the callback function here
        } else {
            console.log("Geocode was not successful for the following reason: " + status);
        }
    });
}
编辑-作为如何使用此选项的示例:

geocodeAddress(search_location, function(search_latlng) {
  console.log(search_latlng);
  $.getJSON('/main/get_places', {search_location: search_latlng}, function(json){
    $("#result_listing").html('');
    // ...
  });
});

它与您的原始代码类似,但是没有将地理代码结果返回到您的代码中,而是将其作为参数传递给您提供的回调函数。

谢谢您的回复!所以,
callback
是在别处定义的一个普通函数,我将它传递到
geocoderadress()
callback()
函数能否将
latlng
变量返回给另一个变量
search\u latlng
传递给
getJSON
函数?从本质上讲,您所做的事情与Google API处理核心异步事务的做法完全相同(满足地理编码查询的底层HTTP请求)。你将一个函数传递给Google API,这样你的API就会被编写,这样当你从其他地方调用它时,你就会传入一个处理函数。嗨,Pointy,我的javascript不是很好,所以我无法理解你。你能在你发布的代码中编写一个回调函数示例代码吗?我试着在谷歌上搜索它,但似乎不是回调函数关于这一点,我知道你正在告诉我。好吧,但我当然不知道你想对lat/lng信息做什么。。。