2014-01-28 41 views
0

我有我想要發起針對每個Ajax請求對象的數組,而請求的結果應該被存儲在相應的對象爲該請求更新對應對象請求

說我有

var dataArray = [{url,data},{url,data},{url,data},{url,data}]; 
for (var i=0;i<dataArray.length;i++){ 
    $.get(dataArray[i].url, function() { 
     .done(function() { 
      //update dataArray[i].data 
     }) 
     .fail(function() { 
      //update dataArray[i].data 
     }) 
    }); 
} 

什麼是正確的方式做到這一點

PS:我不想使用異步:假,因爲我要更新狀態欄


更新

它沒有制定出這樣的

var dataArray = [{url,data},{url,data},{url,data},{url,data}]; 
for (var i=0;i<dataArray.length;i++){ 
    $.get(dataArray[i].url, function() { 
     .done(function(Data) { 
      dataArray[i].data = data 
     }) 
     .fail(function() { 
      //Error handling 
     }) 
    }); 
} 
+0

您是否嘗試過:'$獲得(dataArray中的[I]的.url,功能(newData) {dataArray [i] .data = newData;})' – LoicUV

+0

這正是我所需要的 –

回答

0

試試這個辦法。當你傳遞對象引用時,當你更新數據時,它應該更新原始數組。對不起,我沒有提供jsbin,在工作時被阻止。

function loopThrough() { 
    var dataArray = [{url,data},{url,data},{url,data},{url,data}]; 
    dataArray.forEach(function(element) { 
    getData(element) 
    }) 
} 

function getData(element) { 
    $.get(element.url) 
    .done(function() { 
     //update element.data 
    }) 
    .fail(function() { 
     //update element.data 
    }) 
}); 
} 
+0

這似乎工作,但我想出了一個更簡單的方法來做到這一點 –

+0

您可以請發佈更簡單的方法。我沒有看到很多常規的替代我或@Chris_Dixon發佈的內容。 – bitoiu

+0

我沒有發佈它作爲更新,請參考問題 –

0

與dataArray中封裝你.get功能在自己的職能通過[i]於

var dataArray = [{url,data},{url,data},{url,data},{url,data}]; 
for (var i=0;i<dataArray.length;i++){ 
    $(function(data) { 
     $.get(data.url, function() { 
     }) 
     .done(function() { 
      //update data.data 
     }) 
     .fail(function() { 
      //update data.data 
     }) 
    }); 
    }, dataArray[i]); 
}