2016-06-09 40 views
0

我一直在努力设置变量“列表名”范围正确的验证码...试图让JavaScript变量范围纠正这种trello.get代码

var loadedAtriskopps = function(opps) { 
    var listName = 'empty'; 
    $.each(opps.cards, function(index, opp) { 
     Trello.get(
      '/cards/' + opp.id + '/list?fields=name', {fields: "id, name"}, function(list, err) { 
       var listName = list.name; 
       console.log(listName); //this returns the correct value 
      }); 
     console.log(listName); //this returns 'empty' 
     var opp = $("<div class='row'><div class='col-xs-6'><p class='output'>" + opp.name + "</b><br>On List: " + listName + " </p></div> </div>"); 
     $('#opps').append(opp) 
    }); 
}; 

里面的Trello.get功能它正确返回,但不在其外。经过几个小时的研究,仍然无法做到。


UPDATE:

每建议,尝试这种代码:

var loadedAtriskopps = function(opps) { 
    var listName = 'empty'; 
    $.each(opps.cards, function(index, opp) { 
     console.log(opp.name); // returns correct value 
     Trello.get('/cards/' + opp.id + '/list?fields=name', {fields: "id, name"}) 
       .success(function(list) { 
       listName = list.name; 
       console.log(listName); // // returns correct value 
       // next line errors "Uncaught TypeError: Cannot read property 'name' of undefined" but listName is correct 
       var opp = $("<div class='row'><div class='col-xs-6'><p class='output'>" + opp.name + "</b><br>On List: " + listName + " </p></div> </div>"); 
       $('#opps').append(opp); 
       }) 
       .error(function(err) { 
       console.log("An error: " + err); 
       }); 
    }); 
}; 

好像我已经失去了opp对象定义在成功回调。


SOLUTION:

var loadedAtriskopps = function(opps) { 
    var listName = 'empty'; 
    $.each(opps.cards, function(index, opp) { 
     Trello.get('/cards/' + opp.id + '/list?fields=name', {fields: "id, name"}) 
       .success(function(list) { 
       listName = list.name; 
       var card = $("<div class='row'><div class='col-xs-6'><p class='output'>" + opp.name + "</b><br>On List: " + listName + " </p></div> </div>"); 
       $('#opps').append(card); 
       }) 
       .error(function(err) { 
       console.log("An error: " + err); 
       }); 
    }); 
}; 

谢谢Darren和安迪!

+1

你重新分配在成功奥普对象 - 改变'变种opp'为'无功somethingelse'然后'$(“#哎呀”)追加(somethingelse);' - 你为什么要使用相同的名称? –

+1

修好了!谢谢! –

+1

感谢您的协助,@DarrenSweeney –

回答

0

我相信你需要将你的post-ajax操作转换为成功的回调。这应确保您在之后具有的实际值ajax的值为listName

var loadedAtriskopps = function(opps) { 
    var listName = 'empty'; 
    $.each(opps.cards, function(index, opp) { 
     Trello.get('/cards/' + opp.id + '/list?fields=name', {fields: "id, name"}) 
       .success(function(list) { 
       listName = list.name; 
       console.log(listName); // should return correct value 
       var _opp = $("<div class='row'><div class='col-xs-6'><p class='output'>" + opp.name + "</b><br>On List: " + listName + " </p></div> </div>"); 
       $('#opps').append(_opp); 
       }) 
       .error(function(err) { 
       console.log("An error: " + err); 
       }); 
    }); 
}; 
+0

感谢您的快速响应!按照您的建议,我删除了嵌套的'listName'上的'var',并具有与之前相同的结果。 –

+0

Bryan,看起来你必须为你的ajax调用添加一个成功的回调函数。当你在'.get()'之外的'console.log(listName)'时,它是空的,因为ajax需要完成。我会稍微更新答案。 –

+0

我用你描述的代码更新了原始问题。好像我在成功回调中丢失了'opp'对象的定义。 –