一、当自执行函数在循环当中使用时,自执行函数会在循环结束之后才会运行。比如你在自执行函数外面定义一个数组,在自执行函数当中给这个数组追加内容,你在自执行函数之外输出时,会发现这个数组当中仕么都没有,这就是因为自执行函数会在循环运行完后才会执行。
二、当自执行函数在循环当中使用时,要是自执行函数当中嵌套ajax,那么循环当中的下标i就不会传进ajax当中,需要在ajax外面把下标i赋值给一个变量,在ajax中直接调用这个变量就可以了。
例子:
1 $.ajax({ 2 type: "GET", 3 dataType: "json", 4 contentType: 'application/json', 5 url: "/api/buildings/fault", 6 data: { 7 startTime: kssj, 8 endTime: jssj, 9 faultState: state 10 }, 11 success: function (data) { 12 //console.log(data); 13 $('#select2').empty(); 14 var arr = ['请选择']; 15 for (var i = 0; i < data.length; i++) { 16 (function (i, abbreviation, len) { 17 //console.log(i); 18 var number = i; 19 $.ajax({ 20 type: "GET", 21 url: "/api/faults?limit=1&state=" + state + "&abbreviation=" + encodeURI(abbreviation), 22 data:{ 23 min_occur_time:kssj, 24 max_occur_time:jssj, 25 }, 26 dataType: "json", 27 contentType: 'charset=utf-8', 28 success: function (result) { 29 //console.log(abbreviation + " (" + result.count + ")"); 30 var str = abbreviation + " (" + result.count + ")"; 31 arr.push(str); 32 //console.log(number); 33 if (len - 1 == number) { 34 //console.log(arr); 35 for (var i = 0; i < arr.length; i++) { 36 //console.log(arr[i]); 37 $('#select2')[0][i] = new Option(arr[i], arr[i]); 38 } 39 } 40 } 41 }) 42 })(i, data[i].abbreviation, data.length); 43 } 44 }, 45 });