如何从ajax()成功数据等待图像加载?

时间:2011-04-11 20:27:28

标签: javascript jquery ajax load

我有jquery ajax()函数:

$.ajax({
    type: "POST",
    url: 'ajax.php',
    data: 'url='+variable,
    success: function(data){
        $('#mydiv').html(data);
    }
}); 

我的ajax响应(data变量)与此类似:

<a id="90" href="mylink"><img src="myimagelink90.jpg" /></a>
<a id="91" href="mylink"><img src="myimagelink91.jpg" /></a>
<a id="92" href="mylink"><img src="myimagelink92.jpg" /></a>
<a id="93" href="mylink"><img src="myimagelink93.jpg" /></a>
<a id="94" href="mylink"><img src="myimagelink94.jpg" /></a>
<a id="97" href="mylink"><img src="myimagelink97.jpg" /></a>
<a id="98" href="mylink"><img src="myimagelink98.jpg" /></a>
<a id="120" href="mylink"><img src="myimagelink120.jpg" /></a>
<a id="121" href="mylink"><img src="myimagelink121.jpg" /></a>
<a id="122" href="mylink"><img src="myimagelink122.jpg" /></a>
<a id="123" href="mylink"><img src="myimagelink123.jpg" /></a>
<a id="124" href="mylink"><img src="myimagelink124.jpg" /></a>
<a id="125" href="mylink"><img src="myimagelink125.jpg" /></a>

所以我的问题是:等待myimagelink#.jpg的最简单方法是什么?

4 个答案:

答案 0 :(得分:5)

尝试使用load()功能。在这种情况下,您需要使用live()处理程序绑定它,因为图像是动态加载的:

var loaded = 0;

$('#mydiv a img').live('load', function()
{
  loaded++;

  if (loaded == $('#mydiv a img').length)
  {
    alert('All of the images have loaded.');
  }
});

可能有一种更有效的方法可以做到这一点,所以请随意说这可能有多慢。

答案 1 :(得分:1)

你必须在每个上加一个“onload”事件,递增一些计数器并查看它是否与你插入的图像数量相符。

答案 2 :(得分:1)

您是否正在加载图像,并希望在加载后显示?

虽然'data'是包含字符串的javascript变量,但您的图片不会加载...

要在将图像插入页面之前加载图像,您必须使它们成为dom元素。

不知道这是否是最佳选择,但我认为这有效:

$.ajax({
    type: "POST",
    url: 'ajax.php',
    data: 'url='+variable,
    success: function(data){
        $('<div />').html(data).load(function(){
            $(this).appendTo("#myDiv");
        })
}); 

答案 3 :(得分:1)

类似的东西:

$.ajax({
  type:"POST",
  url: "ajax.php",
  dataType: "application/x-www-form-urlencoded",
  data: "url=" + variable,
  async: true,
  beforeSend : function(){
    $("#Loading").show(); //show image loading
  },
  success: function(msg){
    $("#LoadingPiloto").hide(); //hide image loading
  }
})