Проблема с переменной областью Javascript / jQuery - PullRequest
0 голосов
/ 30 октября 2009

У меня есть скрипт 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 | адреса и циклически просматривайте каждый из них, получая геолокацию каждого адреса, затем обновляйте запись в базе данных, указав широту и долготу географического местоположения.

Моя проблема заключается в следующем ... Во втором (внутреннем) вызове $ .ajax мне нужен доступ к переменной record_id, которую я определил только внутри цикла for, чтобы обновить правильную запись в базе данных, однако я не могу похоже, что нет доступа к этой переменной record_id внутри функции успеха внутреннего сообщения ajax.

Пожалуйста, помогите! Спасибо.

1 Ответ

2 голосов
/ 30 октября 2009

Вам нужно создать замыкание так:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...