为什么我的程序发出无休止的 GET 请求
Why is my program making endless GET requests?
该程序旨在按下更新按钮时在Google地图上发布最近SoundCloud上传的位置。 每次按下"更新"按钮时都会调用 populate((,并且会在地图上发布其中一个位置或调用 findLocations(( 来重新填充数组。出于某种原因,findLocations(( 在由 populate(( 调用时发出无限的请求。这是我的第一个 JavaScript 程序,所以这可能是一个非常菜鸟的错误,如果有人能阐明这一点,那就太好了!GitHub链接也在这里。
编辑:findLocations(( 在我设置断点并逐步完成程序时起作用。我开始认为问题可能与GET请求是异步调用的事实有关。我认为这里正在发生的事情:
- 按下"更新"按钮并调用 locate((
- 地址显示为空,因此定位呼叫查找位置((
- findLocations(( 异步请求 GET "/tracks" 导致创建线程 A 和 B。
- 线程 A 进入请求的回调函数并更新"地址"数组。线程 B 离开 findLocations(((不执行回调函数(,返回 locate(( 以递归调用自身。由于这种情况发生得更快,因此线程 A 能够更新"地址","地址"仍然显示为空,因此再次调用 findLocations,重复步骤 3 中的过程。
这个理论听起来合法吗,如果是这样,我将如何去测试它?
https://github.com/blasian/soundcloud-map/tree/drunk
var locations = [];
var offset = 10;
// Create locations array
function findLocations() {
SC.get("/tracks", { limit: 10, offset: offset }, function(tracks){
offset += 10;
for (var i = 0; i < tracks.length; i++) {
SC.get("/users/" + tracks[i].user_id, function(user){
if (user.country) {
locations.push(user.country);
console.log(user.country);
}
});
}
});
}
// Add next location to map
function locate() {
console.log(locations);
if (locations.length > 0) {
gcode(locations.pop());
} else {
findLocations();
locate();
}
}
您正在使用递归函数:
function locate() {
if (locations.length > 0) {
// recursion stops here
} else {
// updateLocationsUsingAJAX()
// recursion continues here
locate();
}
}
这不符合您的预期:
- 当 AJAX 请求
- 更新
locations
变量时,JavaScript 已经触发了数百个 AJAX 请求
。 - 事实上,AJAX 回调不会被触发,因为 JavaScript 太忙于递归调用递归函数(更新变量的回调排队等待 JavaScript 空闲(
解决方案是重新排列代码,以便在 AJAX 回调函数中处理位置变量 -OR- 触发下一个 AJAX 请求。
相关文章:
- 有没有一种方法可以防止img get请求使用css或js发生
- jQuery Ajax GET请求工作不正常
- 将GET请求(HTML字符串)转换为完整的DOM对象
- 如何在nightwatch.js中发送ajax get请求
- 当我在chrome中切换设备模式时,$http.get请求失败
- 根据GET请求的结果自定义页面内容
- 如何在调用下一个请求之前完成第一个Ajax Get请求
- Codeigniter JQuery在JQuery.get请求后动态加载视图中的数据
- 如果我对一个文件发出ajax GET请求,我会得到什么以及如何将其添加到页面中
- JQuery AJAX 在 GET 请求完成时返回 XML
- AngularJS $http GET 请求到本地 JSON 文件返回语法错误:意外令牌]
- 嵌套在 .get 请求中的 jQuery 不会执行
- 如何在 GET 请求中序列化查询的对象
- 对服务器的 GET 请求返回 net::ERR_CONNECTION_REFUSED
- GET 请求在 javascript 中到 NodeJS
- 无法在角度 js 中将参数传递给 http get 请求
- Ajax GET 请求的 URL 失败,但 hurl.it 相同 URL 的 GET 请求有效.什么给
- Atlasboard在GET请求中给了我500
- 带有正文的Amplifyjs GET请求
- Rails4:是否可以将Ajax.get请求发送到相同的当前页面控制器