慕容3067478
2018-08-10 10:09:45
$http 是angularjs的模塊除了同步以外,還有其他辦法做到以下這一點(diǎn)嗎? 因?yàn)橥叫Ч?。console.log里面打印的全是10.怎么讓它打印0,1,2,3,4,5...以此類推for(var i=0; i<10; i++){
$http({
url : "data.json",
method : "GET"
}).success(function(data){
console.log(i)
},function(error){
})
}
1 回答

收到一只叮咚
TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
function send_http(j){ $http({ url : "data.json", method : "GET" }).success(function(data){ console.log(j) },function(error){ }) }for(var i=0; i<10; i++){ send_http(i); }
原因是這樣的,js發(fā)送http請(qǐng)求的時(shí)候,是異步的(ajax嘛)。所以你的success處理的回調(diào)函數(shù)是只有在請(qǐng)求有返回的時(shí)候才會(huì)被觸發(fā)。也就是說,瀏覽器運(yùn)行這個(gè)for循環(huán)的時(shí)候,只是發(fā)送了一個(gè)http請(qǐng)求,并不等待請(qǐng)求有返回,就直接i++了。這就導(dǎo)致ajax收到返回?cái)?shù)據(jù)并觸發(fā)回調(diào)函數(shù)的時(shí)候,那個(gè)for循環(huán)早就執(zhí)行完了,此時(shí)的i也已經(jīng)是10了。所以console.log(i)
這個(gè)去輸出i的值,得到自然都是10。
然后通過建立一個(gè)函數(shù),就可以把i的當(dāng)前值先存到局部變量j里面,然后for循環(huán)完了,就會(huì)有10個(gè)j變量,互不干擾,就可以正常輸出了。
添加回答
舉報(bào)
0/150
提交
取消