javascript – `while`或`for`循环使用$http.get
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – `while`或`for`循环使用$http.get,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1486字,纯文字阅读大概需要3分钟。
内容图文
![javascript – `while`或`for`循环使用$http.get](/upload/InfoBanner/zyjiaocheng/708/13f1b603e3474644bbe63a8f110a41ce.jpg)
我想知道是否可以使用while或者使用嵌套调用$http.get:
这是一个例子:
for (var i = 0; i < $scope.comments.length; i++) {
alert($scope.comments[i].id); // = 2
$http.get('/api/logged/like/isliked?id=' + $scope.comments[i].id).success(function(data, status, header, config) {
alert('Test');
alert($scope.comments[i].id); // Not executed.
}).error(function(data){alert('The requeste isn't working');}); }
我放了两个警报来显示我用来检索JSON的评论的ID.我得到第一个警报的id,然后第二个警告“测试”,但第三个警报没有显示.为什么不?
这是JSON的一个例子:
{data":[
{"id":2,"is_liked":false,"nb_comments":1,"nb_likes":1,
"date_creation":"2014-05-26T17:03:54+0000"},
{"id":1,"is_liked":true,"nb_comments":0,"nb_likes":1,
"date_creation":"2014-05-26T17:00:26+0000"}
]}
解决方法:
问题:
Don’t make functions inside of a loop ……
函数的每次调用实际上都是在内存中引用i的相同副本.每次for循环运行时都会创建一个新的闭包,但每个闭包捕获相同的环境.因此,每次调用$http.get(异步函数)都会导致从循环结束引用i的相同最终值的回调触发.
一个解法:
将i作为参数传递给单独定义的函数:
var getIsLiked = function(i){
$http.get('isliked.json' + $scope.comments[i].id)
.success(function(data) {
console.log('Test');
console.log('i is ', i);
console.log($scope.comments[i].id);
}).error(function(data){console.log("The request isn't working");}); }
}
for (var i = 0; i < $scope.comments.length; i++) {
getIsLiked(i);
}
这可能真的难以理解,但是值得深入了解.它不仅可以帮助您避免将来出现类似问题,还可以让您更好地理解闭包,这是JavaScript中的一个重要概念.
内容总结
以上是互联网集市为您收集整理的javascript – `while`或`for`循环使用$http.get全部内容,希望文章能够帮你解决javascript – `while`或`for`循环使用$http.get所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。