2014-12-02 142 views
0

我需要从另一个页面加载3个图像。这是我的代码使用AJAX加载图像

<script> 
jQuery(document).ready(function($) { 
    var ids = ['#sk6x4', '#sk6x4a', '#sk6x4c']; 
    var tabs = ['#tab1', '#tab2', '#tab3']; 
    function getInfo() { 
    $.each(ids, function (i, id) { 
     $.ajax('/my-url', { 
     success: function(data){ 
      var imgSrc = $(data).find(ids[i] + ' img').attr('src'); 
      $(tabs[i] + ' img').attr('src', imgSrc); 
     } 
     }); 
    }); 
    } 
}); 
</script> 
<ul class="nav nav-tabs" role="tablist"> 
    <li class="active" id="tab1"><img src="" id="imageTriangle"/></li> 
    <li id="tab2"><img src="" id="imageArc"/></li> 
    <li id="tab3"><img src="" id="imageScat"/></li> 
</ul> 

此代码的工作原理但很慢。图像加载非常缓慢。我怎么能让它更快? ajax加载图像的正确方法是什么?

P.S.图片经过优化

+1

ajax调用缓慢,或图像下载?也许你需要优化图像。 – 2014-12-02 19:28:51

+0

图像经过优化。 – n1zee 2014-12-02 19:29:51

+0

'.each'循环总是会让脚本变慢'for'循环 – 2014-12-02 19:32:37

回答

1

首先,您正在发出多个ajax请求。最好只做一个,然后用JSON或其他东西返回URL。其次,你甚至不需要Ajax来加载图像。你可以这样做:

$(document).ready(function() { 
var ids = ['#sk6x4', '#sk6x4a', '#sk6x4c']; 
var tabs = ['#tab1', '#tab2', '#tab3']; 
function getInfo() { 
    $.ajax('/my-url', { // ajax call to get urls 
     success: function (data) { 
      $.each(ids, function (i, id) { 

       var imgSrc = data.urls[i] //assuming that data is an array that contains the urls 
       var img = $("<img /> ").attr('src', imgSrc).load(function() { 
        if (!this.complete || typeof this.naturalWidth == "undefined" || this.naturalWidth == 0) { 
         alert('Error...!'); 
        } 
        else { 
         $(tabs[i]).html() 
        } 
       }); 

      }); 
     } 
    }); 
} 
}); 
+0

关于不做多个AJAX请求的好处 - 但我不认为我们可以假设OP的端点返回数组中的JSON数据。它似乎是一个真正的*页面加载*返回一个HTML文档。 – kaveman 2014-12-02 19:57:51