2016-01-21 119 views
3

我正在使用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; 
    }); 
}); 
+0

尝试,并把全局范围外的变量定义。 – putvande

+0

未捕获ReferenceError:结果未定义 – Simon

+0

请参阅Rory的答案。 – putvande

回答

3

你需要在一个更高的范围界定latlng变量,这样既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