天天看點

ajax回調函數執行順序帶來的同步異步問題

我們來看這樣一段代碼:

$(function(){

var a =0;

$.getjson(

   "student_toadd",

    {stunum:10},

    function(json,status)

    {

           $.each(json,function(i){

                      $('#studiv').append("<div>學生學号:"+json[i].num+"</div>" );

            }

            ......................................... 

           a = 10;

        });

    }

)

alert(a);

});

你說說看彈出的a是多少?

我說:有可能是10,有可能是0。

因為ajax的執行是異步的,有可能回調函數還沒有拿到傳回值,就彈出a了。

解決辦法

var a = 0;

$.ajax({

          type: "get",

         datatype: "json",

        async: false    // 異步為false

         url: "student_toadd",

         data:{stunum:10},

         success:function(json,status)

                        {

                                  $.each(json,function(i){

                                          $('#studiv').append("<div>學生學号:"+json[i].num+"</div>" );

                                   }

                                  ......................................... 

                                  a = 10;

                        );

 });

alert(a);   

這表示将$.ajax拿到傳回值後,在執行後面的js。這樣a就是10了。這樣有什麼啟發呢?比如我們需要等到傳回值在頁面繪制一些元素,如果是異步的話,有可能繪制出來的東西是空的。

繼續閱讀