0
   // Start
   <div id="ms">
   <img src="img1.jpg"> 
   <img src="img2.jpg">
   </div>

   // After Ajax Completion
   <div id="ms">
   <img src="img3.jpg"> 
   <img src="img4.jpg">
   </div>

    var ik = new Array();

    var ls = function(){         
    $('#ms img').each(function() {
    ik.push($(this).attr("src"));    
    });  
    return ik;          
    }  

    var bs = function() {
    ls();  //img1.jpg, img2.jpg
    $(document).ajaxComplete(function(event,request, settings){         
    ls(); //img1.jpg, img2.jpg, img3.jpg, img4.jpg  should be only img3.jpg, img4.jpg
    });  
    return ik; 
    };

    console.log(bs());

我想在 Ajaxcompletion 之前,数组是空的(img1.jpg 和 img2.jpg)。

如果我这样做,我不会得到任何值​​​:

ik = [];

对于您的帮助,我将不胜感激。

4

1 回答 1

1

第一个问题 - 您重复您的 ID,它们应该是唯一的。第一次调用ls()数组ik后将包含:

0: "img1.jpg"
1: "img2.jpg"
2: "img3.jpg"
3: "img4.jpg"

第二个问题 - 您永远不会重置数组ik,因此每次连续调用ls()都会简单地添加相同的四个值。虽然看起来这可能只是为了调试您的一部分。

最重要的是,您正在记录函数的返回值bs(在这种情况下恰当地命名),但您可能应该在记录任何结果之前等待调用 ajaxComplete。

我不确定您对ik数组的意图是什么,但是在使用异步调用时,您应该使用回调模式(或您选择的异步模式)。

就像是:

var bs = function(callback) {
    $('document').ajaxComplete(function(event, request, settings) {
        callback(…your result here…);
    });
};

bs(function(result) {
   console.log(result);
});
于 2013-08-29T00:22:31.940 回答