jquery中的范围问题得到

时间:2015-12-14 09:39:28

标签: javascript jquery scope get

我有以下这段代码。

for(i=0;i<ownerOps[0].length;i++){
    // opportunities[i] = "ID #" + ownerOps[0][i].opportunityId + ": Number of Properties - " + ownerOps[0][i].numberOfProperties;
    // console.log(opportunities[i]);
    gets.push($.get("/getOwnerLeadByLeadId?ownerLeadId="+ownerOps[0][i].ownerLeadId,function(ownerLead,status){
        console.log(ownerLead);
        console.log("i="+i);
        ownerOps[0][i].name=ownerLead.name;
        ownerOps[0][i].email=ownerLead.email;
        opportunities[i]="Name :"+ownerOps[0][i].name+' Email :'+ownerOps[0][i].email;
    }))
}

由于get是异步的,i的值已经在success处理程序中递增。无论如何在调用get时存储i的值,以便在成功处理程序中使用i的正确值?

3 个答案:

答案 0 :(得分:0)

您可以使用 context 参数存储任何可在成功回调中访问的对象。在这里,您可以存储var i的值。

$.ajax({
  url: "test.html",
  context: document.body
}).done(function() {
  $( this ).addClass( "done" );
}) 

http://api.jquery.com/jquery.ajax

答案 1 :(得分:0)

将循环体包裹在函数中,然后简单地执行以下操作:

for(i=0;i<ownerOps[0].length;i++){
    getOwner(ownerOps[0][i], i);
}

然后在getOwner的范围内,您将始终拥有i

的正确值

答案 2 :(得分:0)

使用jquery解决它。

$.each(ownerOps[0],function(i,ownerOp){
                                // opportunities[i] = "ID #" + ownerOps[0][i].opportunityId + ": Number of Properties - " + ownerOps[0][i].numberOfProperties;
                                // console.log(opportunities[i]);
                                gets.push($.get("/getOwnerLeadByLeadId?ownerLeadId="+ownerOp.ownerLeadId,function(ownerLead,status){
                                    console.log(ownerLead);
                                    console.log("i="+i);
                                    ownerOp.name=ownerLead.name;
                                    ownerOp.email=ownerLead.email;
                                    opportunities[i]="Name :"+ownerOp.name+' Email :'+ownerOp.email;
                                }))
                            })