jquery从另一个函数获取变量

Posted

技术标签:

【中文标题】jquery从另一个函数获取变量【英文标题】:jquery getting variable from another function 【发布时间】:2017-09-27 11:46:58 【问题描述】:

我有获取当前地址的功能(效果很好),该地址由另一个 jquery 函数触发,我使用该函数将 ajax 的结果传递给 mysql

脚本:

var currentlocation;

function getlocation()

        navigator.geolocation.getCurrentPosition(
            function( position ) 

                var lat = position.coords.latitude;
                var lng = position.coords.longitude;
                var google_map_pos = new google.maps.LatLng( lat, lng );

                var google_maps_geocoder = new google.maps.Geocoder();
                google_maps_geocoder.geocode(
                     'latLng': google_map_pos ,
                    function( results, status ) 
                        if ( status == google.maps.GeocoderStatus.OK && results[0] ) 
                            console.log( results[0].formatted_address );
                            currentlocation = results[0].formatted_address;
                            console.log('cl1: ' + currentlocation);
                        
                    
                );
            ,
            function() 
            
        );


//and jquery function (there are multiple functions similar to this one    using the getlocation()

$(document).ready(function () 
    $('[id^=start-]').on('click', function (e) 
        getlocation();
        console.log('cl2: ' + currentlocation);
        var locationsql = currentlocation;
        console.log('cl3:' + locationsql);
    );
);

控制台打印出 cl2 和 cl3 的未定义结果,然后在 cl1 中打印出谷歌位置的正确结果。

所以我遇到的问题是获取变量 currentlocation 以便以后可以在本例中使用它 locationsql

建议高度评价

【问题讨论】:

你试过我的建议了吗? 【参考方案1】:

嗯,用 jQuery Deferred Method 解决了。

我的代码:

var currentlocationTemp;

function getlocation()

        // set dfd variable
        var dfd = $.Deferred();

        /* Chrome need SSL! */
        var is_chrome = /chrom(e|ium)/.test( navigator.userAgent.toLowerCase() );
        var is_ssl    = 'https:' == document.location.protocol;
        if( is_chrome && ! is_ssl )
            return false;
        
        navigator.geolocation.getCurrentPosition(
            function( position ) // success cb
                /* Current Coordinate */
                var lat = position.coords.latitude;
                var lng = position.coords.longitude;
                var google_map_pos = new google.maps.LatLng( lat, lng );

                /* Use Geocoder to get address */
                var google_maps_geocoder = new google.maps.Geocoder();
                google_maps_geocoder.geocode(
                     'latLng': google_map_pos ,
                    function( results, status ) 
                        if ( status == google.maps.GeocoderStatus.OK && results[0] ) 
                            console.log( results[0].formatted_address );
                            currentlocationTemp = results[0].formatted_address;
                            // resolve dfd variable                             
                            dfd.resolve();
                        
                    
                );

            ,
            function() // fail cb
            

        );
        // promise dfd variable
        return dfd.promise();
   


$(document).ready(function () 
$('[id^=start-]').on('click', function (e) 

    function start() 
        currentlocation = currentlocationTemp;
        console.log('cl: ' + currentlocation); 
        

    //// Que of the functions
    getlocation().then(start);  

);
);

【讨论】:

【参考方案2】:

由于 geocode() 函数本身是异步的,所以你必须添加一个回调函数,

function( results, status ) 
                                if ( status == google.maps.GeocoderStatus.OK && results[0] ) 
                                    var currentlocationTemp = results[0].formatted_address;
                                    callback(currentlocationTemp);
                                

并在回调函数中接收您的变量以进行进一步操作

function callback(location)
      currentlocation = location;

【讨论】:

回调函数获取变量值,但我在将这个值传递给 locationsql 时仍然遇到问题。

以上是关于jquery从另一个函数获取变量的主要内容,如果未能解决你的问题,请参考以下文章

Swift:从另一个函数获取函数中的变量

jquery datatable - 如何使用渲染函数从另一列获取数据

从另一个 python 文件中获取变量。无属性错误

java:从另一个类获取私有变量,而不设置getter [重复]

Primefaces 是不是能够从另一个域获取 jquery?

JQuery可以获取从另一个页面传过来的值吗