Ответ Ajax и область действия анонимной функции - PullRequest
0 голосов
/ 06 февраля 2011

В следующем коде

var entryTemplate = document.getElementById('entryTemplate');
entryTemplate = entryTemplate.firstChild;

for (var ipost in posts)
{
  var post = posts[ipost];
  var clone = entryTemplate.cloneNode(true);
  clone = $(clone);

  if (post.imageURL)
  {
    var imgElement = document.createElement('img');
    var largeImageURL = post.largeImageURL ? post.largeImageURL : post.imageURL;
    imgElement.src = post.thumbPresent ? POST_THUMB_URL + '/' + post.postID : largeImageURL;
    imgElement.alt = '';
    clone.find('div.BlogImageURL a').attr('href', largeImageURL).text(largeImageURL);
    clone.find('div.BlogImage a').attr('href', imgElement.src).append(imgElement);

    // get bytesize
    var postdata = 'inline_image_url=' + encodeURIComponent(post.imageURL);
    postdata += '&linked_image_url=' + encodeURIComponent(post.largeImageURL);
    $.ajax({
    type: 'POST',
    url: ASYNC_GET_BYTESIZE_URL,
    data: postdata,
    success: function(bytesize) {
      clone.find('.BlogImageBytesize').html(bytesize);
    }
    });
  }
  else
  {
    clone.find('div.BlogImageURL').text('(This post contains no images)');
    clone.find('div.BlogImage').remove();
  }

  $('#outputDiv').append(clone);
}

clone.find('.BlogImageBytesize').html(bytesize);

Все ответы ajax (жирная линия) изменяют последний клон , вероятно, потому что цикл завершается, когда приходит первый ответ, и клон указывает на последний клон .

Как это исправить?

Спасибо.

1 Ответ

2 голосов
/ 06 февраля 2011

Возможно, вы могли бы установить clone как context вашего Ajax-вызова. (См. документы здесь .) Затем, я думаю, это будет работать примерно так:

$.ajax({
    type: 'POST',
    url: ASYNC_GET_BYTESIZE_URL,
    data: postdata,
    context: clone,
    success: function(bytesize) {
      $(this).find('.BlogImageBytesize').html(bytesize);
    }
});

Я точно не знаю, должен ли context быть простым DOM-элементом или это может быть объект jQuery, но, надеюсь, это поможет вам в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...