自执行函数在循环当中问题

  一、当自执行函数在循环当中使用时,自执行函数会在循环结束之后才会运行。比如你在自执行函数外面定义一个数组,在自执行函数当中给这个数组追加内容,你在自执行函数之外输出时,会发现这个数组当中仕么都没有,这就是因为自执行函数会在循环运行完后才会执行。

  二、当自执行函数在循环当中使用时,要是自执行函数当中嵌套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         });

  

猜你喜欢

转载自www.cnblogs.com/ziyoublog/p/9443726.html