私はかなり大きなjavascript関数に取り組んできましたが、最終的にそれが完了したと思ったとき、それは完全に機能しなくなりました。
ここにあります:
function getLinksFrom(title) {
var returnArray = [],
plcontinue = '',
url = 'http://en.wikipedia.org/w/api.php?action=query&prop=links&titles=' + title + '&format=json&pllimit=500&plnamespace=0&callback=?';
while (returnArray.length === 0 || plcontinue !== '') {
if (plcontinue !== '') {
url = 'http://en.wikipedia.org/w/api.php?action=query&prop=links&titles=' + title + '&format=json&pllimit=500&plnamespace=0&plcontinue=' + plcontinue + '&callback=?';
}
$.ajax({url: url,
dataType: 'json',
success: function(data) {
console.log(data);
for (key in data['query']['pages']) {
links = data['query']['pages'][key]['links'];
}
for (var i = 0; i < links.length; i += 1) {
returnArray.push(links[i]['title']);
}
if (data.hasOwnProperty('query-continue')) {
plcontinue = data['query-continue']['links']['plcontinue'];
} else {
plcontinue = '';
}
}
});
}
return returnArray;
}
私の知る限り、ページがフリーズするだけなので、whileループでスタックしているに違いありません。しかし、ループごとにreturnArrayが大きくなり、plcontinueを何にも設定しないものでテストしています。
何がうまくいかないのか分かりますか?おそらく非同期ロードの何か、私はそれが初めてです。
編集:それで、私は有益なコメントを介して、ajaxが終了するのを待たずに何度も何度もループを繰り返して再開することを理解しました。どうすればそれを止めることができますか?