背景
我正在构建一个针对 EchoNest API 使用自动完成功能的表单。
首先,用户选择艺术家,使用 Artist Suggest 调用。接下来他们选择一首歌曲,但歌曲和/或艺术家歌曲搜索不提供“通配符”搜索。它只返回完全匹配。因此,根据论坛,他们建议构建歌曲数组并在数组上使用自动完成功能。我一次最多只能收到 100 个回复。根据最初的反应,我确实知道歌曲的数量。
我的计划:
- 将 ajax 调用包装在 for 循环('runonceloop')中。
- 用歌曲总数修改第一个响应后的循环退出条件。
我面临的挑战:
'runonceloop' 只完成一个循环,因为或者至少这是我所相信的:
- 在收到第一个响应[1]之前满足退出条件。
我试图调整“退出条件”和“计数器”,以便在成功块的末尾设置并增加它们。这似乎锁定了我的浏览器。
有人可以就这种情况提供一些指导吗?[2]
我真的很感激。
我也不认为关闭异步是一个好主意,因为它会锁定浏览器。
回应[1]:
{
"response": {
"status": {
"code": "0",
"message": "Success",
"version": "4.2"
},
"start": 0,
"total": 121, //Used for
"songs": [
{
"id": "SOXZYYG127F3E1B7A2",
"title": "Karma police"
},
{
"id": "SOXZABD127F3E1B7A2",
"title" : "Creep"
}
]
}
}
}
代码[2]
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.
}
});
}};