我有这个小的jquery脚本,如果我删除'async:false'部分不起作用......我不明白为什么(alert()部分只是为了检查它是否有效) 。我的猜测是它可以异步工作,但事实并非如此。有人可以向我解释原因吗?我该怎么做才能让它变得异步?
$(document).ready(function(){
var artistName = new Array();
var artistPlaycount = new Array();
$('#inputForm').submit(function(){
var userName = $('#username').attr('value');
var amount = $('#amount').attr('value');
userName = "someUsername";
$.ajax({
type: "POST",
url: "prepXML.php",
data: "method=getartists&user="+userName+"&amount="+amount,
dataType: "xml",
async:false,
success: function(xml){
var i = 0;
$("artist",xml).each(function(){
artistName[i] = $(this).find("name").text();
artistPlaycount[i] = $(this).find("playcount").text();
i++;
});
}
});
});
alert(artistName[2]); //or any other iteration number
});
谢谢
答案 0 :(得分:3)
要异步执行此操作,您需要将警报移动到回调中并删除async
选项,如下所示:
$.ajax({
type: "POST",
url: "prepXML.php",
data: "method=getartists&user="+userName+"&amount="+amount,
dataType: "xml",
success: function(xml){
$("artist",xml).each(function(i){
artistName[i] = $(this).find("name").text();
artistPlaycount[i] = $(this).find("playcount").text();
});
alert(artistName[2]);
}
});
否则填充数组的success
函数会在警报发生之后发生 ......所以你想要的还没有完成。直到请求从服务器返回,success
处理程序执行。
此外,.each()
回调的第一个参数是索引,您可以使用它,无需保留自己的递增变量:)
答案 1 :(得分:0)
它不起作用,因为回调是在alert
之后触发的。将alert
放入回调中。
答案 2 :(得分:0)
您需要将警报移动到成功处理程序中。
alert(artistName[2]); //or any other iteration number
循环遍历xml后,应该正确。
所以你应该:
success: function(xml){
var i = 0;
$("artist",xml).each(function(){
artistName[i] = $(this).find("name").text();
artistPlaycount[i] = $(this).find("playcount").text();
i++;
});
alert(artistName[2]); //or any other iteration number
}