Javascript 如何访问JS闭包函数中的变量
我的代码:Javascript 如何访问JS闭包函数中的变量,javascript,jquery,ajax,closures,Javascript,Jquery,Ajax,Closures,我的代码: function addMarkerDraggable(group_id) { // get current view center location var current_view = map.getCenter(); var current_lat = current_view.lat(); var current_lng = current_view.lng(); var mp_id; // ajax add marker t
function addMarkerDraggable(group_id) {
// get current view center location
var current_view = map.getCenter();
var current_lat = current_view.lat();
var current_lng = current_view.lng();
var mp_id;
// ajax add marker to db.
$.ajax({
url: base_url+'myplaces/control/addplace/'+group_id,
type: 'POST',
data: csrf_name+'='+nocsrf_val+'&mp_latitude='+current_lat+'&mp_longitude='+current_lng,
dataType: 'json',
success: function(data) {
if (data.result === true) {
var mp_id = data.mp_id;
}
}
});
console.log(mp_id); // #pos.1
if (mp_id != 'undefined' && mp_id != '') {
var marker_icon = 'red.png';
var marker = new google.maps.Marker({
draggable: true,// ให้ลาก marker ได้ก็กำหนดเป็น true
position: current_view,
icon: iconBase + marker_icon,
map: map,
title: ''
});
google.maps.event.addListener(marker, 'dragend', function() {
update_position = marker.getPosition();
update_lat = update_position.lat();
update_lng = update_position.lng();
console.log(mp_id); // #pos.2
ajaxUpdateMarkerDraggedPosition(mp_id, update_lat, update_lng);
});
}
}// addMarkerDraggable
似乎我无法从.ajax({})设置var mp_id;并且无法从#pos.1和#pos.2的mp#u id变量中获取值
如何从jquery ajax内部设置mp\U id并从google map closure函数访问它?这不起作用的原因是,在您的代码阅读过程中:
if (data.result === true) {
var mp_id = data.mp_id;
}
。。。您正在声明一个名为mp_id的新变量,而不是更改闭包中变量的值。因此,当“success”回调结束时,局部变量mp_id不在范围内,闭包中的mp_id没有任何更改
将成功回调更改为以下内容:
if (data.result === true) {
this.mp_id = data.mp_id;
}
您需要研究在您的情况下“this”将绑定到什么,以确保它是闭包函数addMarkerDragable
这意味着您正在创建另一个变量。
只需删除“var”指示符。简单答案可能重复,您不能这样做,因为ajax是异步的-如何解决它请参见上面的链接
if (data.result === true) {
var mp_id = data.mp_id;
}