jQuery作用域,.each

jQuery作用域,.each,jquery,each,Jquery,Each,更多的帮助,不同的问题。我想从内部循环返回allLessonsArray,但由于某些原因,它无法到达循环函数的外部。我注意到它在哪里起作用,在哪里不起作用。我怎么把这个放回外面 var allLessonsArray= new Array(); $.each(lessonInTopicSectionArray, function(index, lesson){ var lastAttempt = 0; url='domain/learn/mod/lesson/rep

更多的帮助,不同的问题。我想从内部循环返回allLessonsArray,但由于某些原因,它无法到达循环函数的外部。我注意到它在哪里起作用,在哪里不起作用。我怎么把这个放回外面

var allLessonsArray= new Array();
$.each(lessonInTopicSectionArray, function(index, lesson){       
    var lastAttempt = 0;
    url='domain/learn/mod/lesson/report.php?id='+lesson.id+'&action=reportdetail&userid='+userid+'&try='+lastAttempt;
    $.get(url, function(data) {
        var lessonArray= new Array();
        $(data).find('tr.r1.lastrow td.cell.c0')
        .each(function(index, content) {
            var string=jQuery(content).html()
            score=parseInt(string.substr(string.length - 1));
            lessonArray[index]=score;   
        }); 
        allLessonsArray[index]={name:lesson.name, score: lessonArray};
        //This works.
        alert(allLessonsArray[0].name);
        alert(allLessonsArray[0].score[0]);     
    });
    //This doesn't work.
    alert(allLessonsArray[0].name);
    alert(allLessonsArray[0].score[0]);
});
return allLessonsArray;     
是一个AJAXie。一个异步请求,所以你不能随心所欲

你可以做:

var allLessonsArray= new Array();
$.each(lessonInTopicSectionArray, function(index, lesson){       
    var lastAttempt = 0;
    url='http://www.training-source.org/learn/mod/lesson/report.php?id='+lesson.id+'&action=reportdetail&userid='+userid+'&try='+lastAttempt;
    $.get(url, function(data) {
        var lessonArray= new Array();
        $(data).find('tr.r1.lastrow td.cell.c0')
        .each(function(index, content) {
            var string=jQuery(content).html()
            score=parseInt(string.substr(string.length - 1));
            lessonArray[index]=score;   
        }); 
        allLessonsArray[index]={name:lesson.name, score: lessonArray};

         // check length to ensure that full array will return
        if( allLessonsArray.length === lessonInTopicSectionArray.length )
           reciever(allLessonsArray);

    });
});

function receiver(allLessonsArray){
  console.log(allLessonsArray);
}

.get()
的异步行为导致了您的问题。是否有方法在上一次迭代后返回完整数组?非常好。工作完美,我学会了一种新的调试方法。谢谢。我该如何归还阵列?(代码来自较大的函数)。@NathanLothamer as
$.get()
是异步的。您需要使用目标数组启动另一个函数,并在该函数中进行进一步处理,而不是返回。这就是回归的过程。这就是我所想的,这就是我现在正在实施的,谢谢。