今天因故被問到了一個問題:

假設前端有10個ajax,今已非同步方式,依照前端ajax的順序跟後端要資料,這可考倒我了。玩過ajax非同步都知道,它回來的順序是無法控制的。例如以下demo:

<scripttype="text/javascript">

        $(document).ready(function () {

            q1();

            q2();

            q3();

        })

    </script>

<script>

        function q1() {

      // Return "1";

            $.ajax({

                url: 'Default.aspx/getNumber1',

                data: [],

                dataType: 'json',

                type: 'POST',

                contentType: "application/json; charset=utf-8",

                success: function (data) {

                    console.log(data.d);

                }

            })

        }

        function q2() {

           // Return "2";

            $.ajax({

                url: 'Default.aspx/getNumber2',

                data: [],

                dataType: 'json',

                type: 'POST',

                contentType: "application/json; charset=utf-8",

                success: function (data) {

                    console.log(data.d);

                }

            })

        }

        function q3() {

           // Return "3";

            $.ajax({

                url: 'Default.aspx/getNumber3',

                data: [],

                dataType: 'json',

                type: 'POST',

                contentType: "application/json; charset=utf-8",

                success: function (data) {

                    console.log(data.d);

                }

            })

        }

    </script>

然後在瀏覽器底下多重整幾次,就能觀察到傳回值並未照著function的順序回傳。

擷取  

於是詢問GOOGLE大神後,它真是有求並應,讓我找到了一個元件ajaxq,它的概念就跟Queue一樣,讓你的ajax能依序執行。依序執行有何好處呢?這樣做能防止同時對server端封送大量的請求,造成server的負擔。因為現在的網頁資訊豐富,動不動就以ajax call後端,很可能一個頁面就寫了數十個ajax,所以以ajax query的寫法能減輕server的負擔。寫法如下:

 

$(document).ready(function () {

 

            $.ajaxq("myq", {

 

                url: 'Default.aspx/getNumber1',

 

                data: [],

 

                dataType: 'json',

 

                type: 'POST',

 

                contentType: "application/json; charset=utf-8",

 

                success: function (data) {

 

                    console.log(data.d);

 

                }

 

            });

 

            $.ajaxq("myq", {

 

                url: 'Default.aspx/getNumber2',

 

                data: [],

 

                dataType: 'json',

 

                type: 'POST',

 

                contentType: "application/json; charset=utf-8",

 

                success: function (data) {

 

                    console.log(data.d);

 

                }

 

            });

 

            $.ajaxq("myq", {

 

                url: 'Default.aspx/getNumber3',

 

                data: [],

 

                dataType: 'json',

 

                type: 'POST',

 

                contentType: "application/json; charset=utf-8",

 

                success: function (data) {

 

                    console.log(data.d);

 

                }

 

            });

 

        })

如此,再多刷幾次網頁,觀察console的變化,它果然乖乖的依序執行了 ^^

 

AjaxQ下載處:https://github.com/Foliotek/AjaxQ

 

arrow
arrow
    全站熱搜

    忙裡偷閒 發表在 痞客邦 留言(0) 人氣()