バックグラウンド
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.
}
});
}};