Javascript jQueryAjax循环调用只运行一次-是否存在计时和退出条件问题? 出身背景
我正在构建一个针对EchoNest API使用autocomplete的表单 首先,用户选择一位艺术家,使用艺术家建议调用。接下来,他们选择一首歌曲,但歌曲和/或艺术家歌曲搜索不提供通配符搜索。它只返回完全匹配的结果。所以,基于论坛,他们建议建立一个歌曲阵列,并在阵列上使用自动完成。我一次最多只能得到100个回复。根据最初的反应,我确实知道歌曲的数量 我的计划: 将ajax调用包装在for循环“runonceloop”中。 用歌曲总数修改第一次响应后的循环退出条件。 我面临的挑战是: “runonceloop”只完成一个循环,因为或至少我相信: 在接收到第一个响应[1]之前满足退出条件。 我试图调整“退出条件”和“计数器”,以便在成功块结束时设置和增加它们。这似乎锁定了我的浏览器 有人能为这种情况提供一些指导吗?[2] 我真的很感激 我也不认为关闭异步是个好主意,因为它会锁定浏览器 答复[1]: 代码[2]Javascript jQueryAjax循环调用只运行一次-是否存在计时和退出条件问题? 出身背景,javascript,ajax,jquery,dom,Javascript,Ajax,Jquery,Dom,我正在构建一个针对EchoNest API使用autocomplete的表单 首先,用户选择一位艺术家,使用艺术家建议调用。接下来,他们选择一首歌曲,但歌曲和/或艺术家歌曲搜索不提供通配符搜索。它只返回完全匹配的结果。所以,基于论坛,他们建议建立一个歌曲阵列,并在阵列上使用自动完成。我一次最多只能得到100个回复。根据最初的反应,我确实知道歌曲的数量 我的计划: 将ajax调用包装在for循环“runonceloop”中。 用歌曲总数修改第一次响应后的循环退出条件。 我面临的挑战是: “runo
不确定它是否适合您的需要,但修复了一些语法错误并使用了闭包:
var songsList = [];
function getSongs() {
var numsongs = 2; //at least 2 runs.
var startindex = 0;
runonceloop: //<~~~~Referenced in question
for (var j = 0; j < numsongs;j++) {
console.log('numsongs' + numsongs);
(function(_startindex){
$.ajax({
url: "http://developer.echonest.com/api/v4/artist/songs",
dataType: "jsonp",
data: {
results: 100,
api_key: "XXXXXXXXXXXX",
format: "jsonp",
name: $("#artist").val(),
start: _startindex
},
success: function (data) {
var songs = data.response.songs;
numsongs = data.response.total; //modify exit condition
for (var i = 0; i < songs.length; i++) {
songsList.push(songs[i].title);
console.log(songsList);
}
}
});
})(startindex);
startindex+=100;
}
};
getSongs();
{检查控制台}感谢您的修复。它现在运行得更好了:-但是它实际运行了3次,但没有遵循附加的numsongs退出条件。对于所示的示例响应,第一次响应之后的j numsongs应该是121。取而代之的是“2”。总共有121个结果。我尝试使用“numsongs=data.response.total”对其进行调整,我知道从第一个json正确读取了总计。我在代码中添加了注释,试图澄清。参见“成功”后面的第3行
var songsList = [];
function getSongs() {
var numsongs = 2; //at least 2 runs.
var startindex = 0;
runonceloop: //<~~~~Referenced in question
for (var j = 0;j >= numsongs;) {
console.log('numsongs' + numsongs);
$.ajax({
url: "http://developer.echonest.com/api/v4/artist/songs",
dataType: "jsonp",
data: {
results: 100,
api_key: "XXXXXXXXXXX",
format: "jsonp",
name: $("#artist").val(),
start: startindex
},
success: function (data) {
var songs = data.response.songs;
//This is my big problem. numsongs for the exit condition isn't being modified.
numsongs = data.response.total; //modify exit condition
for (var i = 0; i < songs.length; i++) {
songsList.push(songs[i].title);
}
j +=100;// increase by 100 to match number of responses.
}
});
}};
var songsList = [];
function getSongs() {
var numsongs = 2; //at least 2 runs.
var startindex = 0;
runonceloop: //<~~~~Referenced in question
for (var j = 0; j < numsongs;j++) {
console.log('numsongs' + numsongs);
(function(_startindex){
$.ajax({
url: "http://developer.echonest.com/api/v4/artist/songs",
dataType: "jsonp",
data: {
results: 100,
api_key: "XXXXXXXXXXXX",
format: "jsonp",
name: $("#artist").val(),
start: _startindex
},
success: function (data) {
var songs = data.response.songs;
numsongs = data.response.total; //modify exit condition
for (var i = 0; i < songs.length; i++) {
songsList.push(songs[i].title);
console.log(songsList);
}
}
});
})(startindex);
startindex+=100;
}
};
getSongs();