在jQuery中传递变量
问题描述:
我正在使用geocomplete lib获取输入字段中提供的地址的纬度和经度。然后我需要将lat和lng传递给from以提交数据。 但是每次我这样做,我得到以下错误时“未捕获的ReferenceError:LAT没有定义”在jQuery中传递变量
var option = {
types: ['(cities)'],
country: 'GB'
};
$("#location").geocomplete(option).bind("geocode:result", function(event,
result) {
console.log(result.geometry.location.lat());
console.log(result.geometry.location.lng());
var lat = result.geometry.location.lat()
var lng = result.geometry.location.lng()
});
$(document).ready(function() {
$('form.ajax').on('submit', function(e) {
e.preventDefault();
var params = {
lat: lat,
lng: lng,
}
$.ajax({
type: 'POST',
data: params,
url: 'save_to_json.php',
success: function(data) {
console.log('success');
console.log(data);
},
error: function(data) {
console.log('error');
console.log(data);
},
complete: function() {
console.log('complete');
}
});
return false;
});
});
答
你需要在一个更高的范围界定lat
和lng
变量,这样既geocode:result
处理程序和形式submit
处理器可以访问它们。试试这个:
vat lat, lng;
$("#location").geocomplete(option).bind("geocode:result", function(event, result) {
// note the removal of 'var'
lat = result.geometry.location.lat()
lng = result.geometry.location.lng()
});
或者如果你愿意,以避免全局变量,你可以设置这些值在提交的点被读取的形式data
属性:
$("#location").geocomplete(option).bind("geocode:result", function(event, result) {
$('form.ajax').data({
lat: result.geometry.location.lat()
lng: result.geometry.location.lng()
});
});
$(document).ready(function() {
$('form.ajax').on('submit', function(e) {
e.preventDefault();
var $form = $(this);
var params = {
lat: $form.data('lat'),
lng: $form.data('lng'),
};
// the rest of your AJX code...
});
});
+0
谢谢@roy为你的智慧 – Simon
尝试,并把全局范围外的变量定义。 – putvande
未捕获ReferenceError:结果未定义 – Simon
请参阅Rory的答案。 – putvande