Javascript / jQuery变量范围问题

时间:2009-10-30 18:44:35

标签: jquery scope google-maps

我有一个jQuery脚本:

$.ajax({
  url: "/scripts/secure/development/ajax.asp",
  type: "POST",
  dataType: "text",
  data: "cmd=addresses",
  success: function(msg){
    var arrRows = msg.split("#*#");
    for(i=0;i<arrRows.length;i++){
      var record_id = arrRows[i].split("|")[0];
      var address = arrRows[i].split("|")[1];

      getPoint(address,function(pnt){
        var latitude = pnt.lat();
        var longitude = pnt.lng();

        $.ajax({
          url: "/scripts/secure/development/ajax.asp",
          type: "POST",
          dataType: "text",
          data: "cmd=update&rec_id="+record_id+"&lat="+latitude+"&lng="+longitude,
          success: function(msg){
          }
        });
      });
    }
  }
});

function getPoint(address,callback){
  var geocoder = new GClientGeocoder();
  geocoder.getLatLng(address,callback);
}

该脚本旨在提取一个分隔的record_ids列表地址和循环遍历每个地址并获取每个地址的地理位置,然后使用地理位置的lat和lng更新数据库中的记录。

我的问题是这个......在第二个(内部)$ .ajax调用中,我需要访问我在for循环中定义的record_id变量,以便更新数据库中的正确记录但是我可以似乎无法访问内部ajax帖子的成功函数中的record_id变量。

请帮忙! 感谢。

1 个答案:

答案 0 :(得分:2)

您需要创建一个这样的闭包:

var callback = (function(record_id)
{
    return function(pnt)
    {
        var latitude = pnt.lat();
        var longitude = pnt.lng();

        $.ajax({
          url: "/scripts/secure/development/ajax.asp",
          type: "POST",
          dataType: "text",
          data: "cmd=update&rec_id="+record_id+"&lat="+latitude+"&lng="+longitude,
          success: function(msg){
          }
        });
      });
})(record_id);

getPoint(address, callback);