background image

                                    

//根据前面传过去的索引找到对应 Deferred 对象,将状态改成 resolve(表

示成功

)

                                    deferredOBJ[data.Index].resolve();
                                } 

else

 {

                                    

//

 

如果请求出错

,将状态改成 reject (表示失败)

                                    

//这里调用 reject()后,会立即执行下面的 fail()函数

                                    deferredOBJ[data.Index].reject(data.msg);
                                }
                            },
                            error: 

function

 (data, statu) {

                                alert("ajax 请求获取数据失败!");
                            }
                        });
                    }

                    

//使用$.when() 来控制 3 个异步请求的流程,保证所有异步请求都完成后再执行

done 函数

                    $.when(deferredOBJ[0], deferredOBJ[1], deferredOBJ[2])
                     .done(

function

 () {

                         

var

 result = "所有请求完成...";

                         $("#div_Content").append($("<p/>").text(result));
                     })
                     .fail(

function

 (error) {

                         alert("从 JIRA 获取度量项数据失败, 请重试");
                     });

                });

        });
    </script>
这里的巧妙之处在于

 jsonData.Index = i;  这句代码,不然要就要写 3 个 ajax 请求,代码会显得

臃肿

.

如果不记录当前请求索引的话

,后面的 success,error 函数就无法找到对应的 Deferred 对象来

改变状态

.

可能大家会问

,为什么不用 deferredOBJ[i]来获取,这是因为请求都是异步的,在 success,error

函数里来获取

 i 永远都是 2(因为 requestInfoArr.length 是 2).

 

让我们来验证一下这

3 个 ajax 请求是不是都是异步执行的.