Javascript jQuery脚本应该运行异步,但只能运行同步?为什么?

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(

我有一个小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
});

感谢您

要异步执行此操作,您需要将警报移动到回调中并删除
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”以使其异步。你的问题还不清楚。