jQuery表单在for循环内提交

时间:2018-12-13 15:55:48

标签: javascript c# jquery asp.net-mvc zip

function GenerateZipPackage() {
    var drpListSelected = $("#drpCourse").chosen().val(); --I am using a chosen multiselect library 

    $.each(drpListSelected, function(i, courseId) {
        $('#CurrentCourseId').val(courseId);
        $("#frmZipPackages").submit();
    });
}

根据courseId,我正在生成要下载的zip课程包。         但是,当我运行此代码时,我只会为drpListSelected中的最后一个CourseId获得一个zip软件包。通过JS文档,我认为.each循环是一个同步调用,因此不会调用所有其他表单提交调用。我试图四处寻找,并找到了解决此问题的另一种方法,即将整个列表发送到服务器端代码并​​为每个课程返回一个包含多个zip文件的单个zip文件。但是单个文件的大小约为2mb,如果选择了很多courseId,我肯定会遇到内存异常。谁能在正确的方向帮助我?如果我可以按顺序队列提交表单,我想我将完成此操作而无需在服务器端进行任何更改(因为我们已经有了在表单提交时一次创建单个程序包的代码)

1 个答案:

答案 0 :(得分:0)

示例以表单提交为例的ajax调用

 function GenerateZipPackage() {
        var drpListSelected = $("#drpCourse").chosen().val();  // we assume  drpListSelected = ['01', '23'];
      var $currentCurseId = $('#CurrentCourseId'); //defined once, used multiple times

      drpListSelected.forEach(function(courseId) {
        $currentCurseId.val(courseId);
        sendAjax(courseId);
      });
    }

    function sendAjax(courseId) {
      $.ajax('your url', {
        type: 'POST',
        data: {courseId:courseId},
        dataType: 'json',
        success: function(resp) {
          console.log(resp);
        },
        error: function(req, status, err) {
          console.error('something went wrong', status, err);
        }
      });
    }