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从另一个函数获取变量的主要内容,如果未能解决你的问题,请参考以下文章
jquery datatable - 如何使用渲染函数从另一列获取数据
java:从另一个类获取私有变量,而不设置getter [重复]