ajax非同步問題導致資料出錯(為什麼已經修改了值,下方程式碼卻得到的是未修改過的值)
看兩段程式碼:
//填充推薦人資訊
$('#recommenderCode').bind('blur' , function(){//焦點觸發方法
if(idnoBlurFlag){
//填充推薦人資訊
getRecommenderInfo();//利用ajax查值,成功之後進行賦值
//帶出營銷員職級資訊
setRank();//查詢getRecommenderInfo();已經賦值的值
}
});
function getRecommenderInfo() {
$.ajax({
url : "${ctx}personnel/agentInfo/findRecomByCode.do",
type : "post",
data : {
recommenderCode : recommenderCode
},
success : function(recommender) {
if (recommender != '') {
var obj = eval("(" + recommender + ")");
var rows = obj["recommender"];
for ( var i = 0; i < rows.length; i++) {
$('#reRankName').val(rows[i].rankName);//賦值
問題: setRank();中得到的值$('#reRankName').val()並不是rows[i].rankName,而是之前的老資料。
原因:ajax是預設非同步請求的,當未ajax返回結果值時,setRank();也是會執行的,率先得到未賦值之前的值。
解決:在 $.ajax語句塊中加入屬性:async: false,使ajax變成同步請求,即有返回結果後才執行下方程式碼,結果就會正確了。