2014-01-23 3 views
0

내 데이터베이스에서 100 개의 이미지 (110x110 픽셀)를로드하고 싶습니다.페이지로드 후 jquery-ajax로 이미지로드

그래서 첫째, 나는 나의 HTML 파일의 끝에서 울부 짖는 코드라고 :

var images = ""; 
for(var i = 0; i < 100; i++){ 
    $.ajax({ 
     type: "POST", 
     url: "getImages.php", 
     data: {artist: users[i]}, 
     success: function(res) { 
      images += '<li><img src="' + res + '" /></li>'; 
     }, 
     async: false 
    }); 
} 

$("#list").append(images); // add images to my page (#list is an ul element) 

$(document).ready(function() { 
    displayWithEffect(); // shows all images 
}); 

문제는 (기가 약) 100 개 이미지를로드하는 데 시간이 너무 오래 걸려서, 그리고 내 웹 브라우저는하지 않습니다 그 전에 아무것도 표시하십시오.

그래서 코드를 변경하여 모든 내용을 먼저로드 한 다음 img 소스 (src)를 변경하십시오. 그래서 나는 이것을했다 :

var images = ""; 
for(var i = 1; i <= 100; i++){ 
    images += '<li><img src="" /></li>'; 
} 

$("#list").append(images); // add images to my page 

$(document).ready(function() { 
    var i = 0; 
    $("#list li").each(function(idx, li) { 
     var product = $(li); 
     $.ajax({ 
      type: "POST", 
      url: "getImages.php", 
      data: {artist: users[i]}, 
      success: function(ret) { 
       $(li).children(":first").attr("src", ret); 
      }, 
      async: false 
     }); 
     i++; 
    }); 
    displayWithEffect(); // shows all images 
}); 

그러나 나는 여전히 이전과 같은 효과를 얻는다.

먼저 100 개의 이미지를 제외하고 내 페이지의 모든 콘텐츠를로드하고 표시 한 다음 에이잭스로 이미지 (일부 loading.gif 애니메이션 뒤에)를로드하는 방법은 무엇입니까?

+0

두 번째 코드의 세 번째 줄에'res' 변수는 무엇으로 $(document).ready(function() { ... 교체? –

+0

편집 됨 ... 복사/붙여 넣기 오류 – David

+0

[Lazy Load plugin] (http://www.appelsiini.net/projects/lazyload)과 같은 기존 라이브러리를 사용하면 어떨까요? –

답변

1

$(window).on('load', function() { ...

$(window).on('load', function() { 
    var images = ""; 
    for(var i = 1; i <= 100; i++){ 
     images += '<li><img src="' + res + '" /></li>'; 
    } 

    $("#list").append(images); // add images to my page 

    $("#list li").each(function(idx, li) { 
     var product = $(li); 
     $.ajax({ 
      type: "POST", 
      url: "getImages.php", 
      data: {artist: users[idx]}, 
      success: function(ret) { 
       product.children(":first").prop("src", ret); 
      } 
     }); 
    }); 
    displayWithEffect(); // shows all images 
}); 
+0

같은 효과 '$ (window) .on ('load'' ... – David

+1

그리고 async : false 등을 제거 했습니까? – adeneo

+0

'async : false'가 실제로 문제가되었습니다. 감사합니다! – David