2011-02-05 113 views
0

在下面的代碼Ajax響應和匿名函數範圍

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響應(粗線)修改最後克隆,大概在第一響應到達,因爲循環結束後和克隆點到最後的克隆

我該如何解決這個問題?

謝謝。

回答

2

也許你可以設置clone作爲你的ajax調用的context。 (見docs here)。然後,我覺得這工作是這樣的:

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

我不知道是否該context必須是一個普通的DOM元素,或者它可以是一個jQuery對象,但希望這能讓你走上正軌。

+0

謝謝,我不知道關於上下文選項... – Robin 2011-02-06 00:19:08