2016-06-09 39 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'對象的定義。 –