最近在學習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方法,這裏就不做討論了。
寫本文一是分享心得,二是怕自己以後忘記,如果不能爲您提供幫助,請另尋貴資!