xml_queries: function (data) {
var values = [];
// ...
$.each(data, function(index, value) {
// ...
// Start xml query
var i = 0;
get_data(value.value);
function get_data(value) {
$.ajax({
type: 'POST',
url: '/admin/scanner/get_music_data/' + value,
dataTaype: 'json',
success: function(response) {
if ( response === 'FALSE' ) {
// Start recursion - up to 3 Retries
if ( ++i <= 3 ) {
setTimeout(function() {
get_data();
}, 100);
} else {
// ...
}
} else {
values.push(response);
}
}
});
}
});
// return values;
console.log(values);
}
我的问题是最后一行中的console.log()是立即触发的(当循环仍在处理数据时)。是否有任何简单的可能性等待循环完成? \:
祝你好运!
答案 0 :(得分:1)
根据您当前的代码,最直接的方法是将$ .ajax的async
选项设置为false,以强制执行同步请求,导致JavaScript在继续执行后续语句之前等待它完成(它不会为异步请求执行此操作。)
$.ajax(
{
type: 'POST',
async: false,
...
这将阻止您的浏览器在每个请求期间(yuck)。另一种方法是重新设计你的应用程序,以便从第一个成功回调中调用下一个ajax调用,例如:
$.ajax(
{
type: 'POST',
...
success: function() {
doAjaxThingie();
}