首页 > 在同一个each里写了2次ajax,一个同步一个异步。为啥会只有第一个学生成绩?

在同一个each里写了2次ajax,一个同步一个异步。为啥会只有第一个学生成绩?

因为要对教务系统多学生成绩进行处理,形成表格显示。所以先获取到每个学生所选的课程(要排除选课不同引起的有的同学没选的情况跟没过重新学习有多个相同课程),形成表格。然后再对学生成绩进行判断,填到表格中。但是为什么这样子会顺序乱了,而且只获取了第一个学生的成绩。

$(document).ready(function(){
    var html = ' '
        html +='<div id="button">';
        html +='<input type="button" value="查询成绩">';
        html +='</div>'
    $("#bodyInfo").find("table:eq(0)").after(html);
    
    $("#bodyInfo").on('click','input[value="查询成绩"]',function(){
        var tableLength = $("#outtable").find("tr").length;
        var tmp = {};
        var szOne = [];
        var szTwo = [];
        if ( tableLength >=3 ){
            $("#outtable").hide();
            $("#bodyInfo>div>p").hide();
            var newHtml = ' '
                newHtml += '<div>';
                newHtml += '<h1 align="center">学生成绩列表</h1>';
                newHtml += '<div class="content">';
                newHtml += '<div class="sub"></div>'
                newHtml += '<div class="sup"></div>';
                newHtml += '</div>'
            $("#bodyInfo").append(newHtml);    
            //数组去重
            Array.prototype.unique = function(){
                    var res = [];
                    var json = {};
                    for(var i=0;i<this.length;i++){
                        if( !json[this[i]] ){
                            res.push(this[i]);
                            json[this[i]]=1;
                        }
                    }
                    return res;
            }
            
            $("#outtable").find("tr").not(":first").each(function(){
                var studentNum = $(this).find("td:eq(0)").text();//学生学号
                $.ajax({
                    type:"get",
                    url:"url",
                    data:{
                        stucode:studentNum
                    },
                    async: false,
                    success:function(html){
                        var html = $(html).filter("table:eq(1)");
                        html.find("tr").not(":first").each(function(){
                            var category = $(this).find("td:eq(5)").text();//修习类别
                            if ( category == "专业选修" ){
                                var subject = $(this).find("td:eq(2)").text();//课程名
                                szOne.push(subject);    
                            }
                        })
                    }
                })

                $.ajax({
                    type:"get",
                    url:"url",
                    data:{
                        stucode:studentNum
                    },
                    success:function(html){
                        var html = $(html).filter("table:eq(1)");
                        html.find("tr").not(":first").each(function(){
                            var category = $(this).find("td:eq(5)").text();
                            if ( category == "专业选修" ){
                                var subject = $(this).find("td:eq(2)").text();
                                var grade = $(this).find("td:eq(8)").text();//成绩
                                if ( isNaN(grade) ){
                                    switch(grade)
                                    {
                                        case "优秀":
                                        grade = 90;
                                        break;

                                        case "良好":
                                        grade = 80;
                                        break;

                                        case "中等":
                                        grade = "70";
                                        break;

                                        case "合格" : case "及格":
                                        grade = "60";
                                        break;

                                        default:
                                        grade = "50";
                                    }

                                }else{
                                    grade = parseInt(grade);
                                }
                                if ( !tmp.hasOwnProperty(subject) ){
                                    tmp[subject] = grade;
                                    szTwo.push($(this));
                                }else{
                                    if( tmp[subject] <= grade ){
                                        tmp[subject] = grade;
                                        szTwo.remove();
                                        szTwo.push($(this));
                                    }else{
                                        $(this).remove();
                                    }
                                    $(".sup").append(szTwo);    
                                }
                            }
                        })
                    }
                })    
            })
        }
        $(".sub").append(szOne.unique());
    })
})

新手初学,望大神指点。谢谢
【热门文章】
【热门文章】