Javascript jQuery脚本应该运行异步,但只能运行同步?为什么?
我有一个小jquery脚本,如果我删除'async:false'部分,它将无法工作。。。我不明白为什么(alert()部分只是用来检查它是否有效)。我的猜测是它会异步工作,但事实并非如此。谁能给我解释一下原因吗?我应该改变什么使它异步呢Javascript jQuery脚本应该运行异步,但只能运行同步?为什么?,javascript,jquery,ajax,synchronization,Javascript,Jquery,Ajax,Synchronization,我有一个小jquery脚本,如果我删除'async:false'部分,它将无法工作。。。我不明白为什么(alert()部分只是用来检查它是否有效)。我的猜测是它会异步工作,但事实并非如此。谁能给我解释一下原因吗?我应该改变什么使它异步呢 $(document).ready(function(){ var artistName = new Array(); var artistPlaycount = new Array(); $('#inputForm').submit(
$(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
});
感谢您要异步执行此操作,您需要将警报移动到回调中并删除
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
处理程序才会执行
此外,回调的第一个参数是索引,您可以使用它,无需保留自己的递增变量:)要异步执行此操作,您需要将警报移动到回调中并删除
异步
选项,如下所示:
$.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
处理程序才会执行
此外,回调的第一个参数是索引,您可以使用它,无需保留自己的递增变量:)它不起作用,因为回调是在发出
警报之后触发的。将警报
放入回调。它不起作用,因为回调是在警报
之后触发的。将警报
放入回调。您需要将警报移动到成功处理程序中
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
}
您需要将警报移动到成功处理程序中
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
}
删除“async:false”使其异步。您的问题仍然不清楚。请删除“async:false”以使其异步。你的问题还不清楚。