【问题标题】:How to access variable in JS closure function如何在 JS 闭包函数中访问变量
【发布时间】:2014-03-28 09:40:27
【问题描述】:

我的代码:

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_id 变量中获取值。

如何从 jquery ajax 内部设置 mp_id从谷歌地图关闭函数访问它

【问题讨论】:

标签: javascript jquery ajax closures


【解决方案1】:

这不起作用的原因是因为在您的代码中读取如下:

        if (data.result === true) {
            var mp_id = data.mp_id;
        }

...您正在声明一个名为 mp_id 的 new 变量,而不是更改闭包中变量的值。因此,当 'success' 回调结束时,local 变量 mp_id 会超出范围,并且闭包中的 mp_id 不会发生任何变化。

将成功回调改成如下:

         if (data.result === true) {
            this.mp_id = data.mp_id;
         }

您需要研究在您的情况下 'this' 会绑定什么,以确保它是闭包函数 addMarkerDraggable。

【讨论】:

    【解决方案2】:
        if (data.result === true) {
            var mp_id = data.mp_id;
        }
    

    这意味着您正在创建另一个变量。 只需删除“var”指示符即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-24
      • 2021-05-28
      • 2013-04-24
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多