1. 程式人生 > >ajax非同步問題導致資料出錯(為什麼已經修改了值,下方程式碼卻得到的是未修改過的值)

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變成同步請求,即有返回結果後才執行下方程式碼,結果就會正確了。