使用AngularJS綁定ajax返回的數據

最近在學習AngularJS,感覺AngularJS綁定數據確實方便,於是儘快用到項目中,我綁定的是一個下拉框:通過ajax獲取數組,將ajax返回的數據綁定到下拉框上,自動生成下拉列表,但是中間遇到了綁定失敗的問題,如下是我的解決思路(不再貼運行效果圖,只提供解決問題的思路,以作參考)
錯誤綁定代碼如下:

   $(function () {
        var app = angular.module('myApp', []);
            app.controller('myCtrl', function ($scope) {
                $scope.names = JSON.parse(GetArray());
                $scope.seconds = JSON.parse(GetArray());
            })
        })
        function GetArray() {
            var obj = {
                NameSpace_name: sessionStorage["NameSpace"]
            };
            $.ajax({
                type: 'post',
                url: "../../Model/Test",
                contentType: 'application/json',
                data: JSON.stringify(obj),
                async: false,
                success: function (data) {
                    return data;
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    /*jqXHR對象的信息*/
                    console.log('jqXHR.responseText --> ', jqXHR.responseText);
                    console.log('jqXHR.status --> ', jqXHR.status);
                    console.log('jqXHR.readyState --> ', jqXHR.readyState);
                    console.log('jqXHR.statusText --> ', jqXHR.statusText);
                    /*其他兩個參數的信息*/
                    console.log('textStatus --> ', textStatus);
                    console.log('errorThrown --> ', errorThrown);
                }

            });
        }

這樣的綁定會出問題的,一是ajax是異步的,當AngularJS中元素綁定數值時,此時ajax返回值還爲null,將ajax設置成同步也不行(具體原因正在找),此時我們可以將ajax放到AngularJS中controller的function中執行:

<script type="text/javascript">
        var models;
        var app = angular.module('myApp', []);
        app.controller('myCtrl', function ($scope) {
            var obj = {
                NameSpace_name: sessionStorage["NameSpace"]
            };
            $.ajax({
                type: 'post',
                url: "../../Model/Test",
                contentType: 'application/json',
                data: JSON.stringify(obj),
                async: false,
                success: function (data) {
                    $scope.names = JSON.parse(data);
                    $scope.seconds = JSON.parse(data);
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    /*jqXHR對象的信息*/
                    console.log('jqXHR.responseText --> ', jqXHR.responseText);
                    console.log('jqXHR.status --> ', jqXHR.status);
                    console.log('jqXHR.readyState --> ', jqXHR.readyState);
                    console.log('jqXHR.statusText --> ', jqXHR.statusText);
                    /*其他兩個參數的信息*/
                    console.log('textStatus --> ', textStatus);
                    console.log('errorThrown --> ', errorThrown);
                }

            });

           
        });


    </script>

綁定成功。
最後提醒,綁定的數據類型如果是數組,需轉化爲JSON對象。
當然通過AngularJS綁定數據時,還可以使用AngularJS自帶的$http方法,這裏就不做討論了。
寫本文一是分享心得,二是怕自己以後忘記,如果不能爲您提供幫助,請另尋貴資!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章