通過ajax向后臺發送和接收數據時,常常會出現同步異步問題。由于ajax是默認異步加載的,但有時候需要同步或者同步的效果,有以下兩種解決方案。
方案一:將某些方法放在回調函數中執行,即,等到從后臺返回成功后再執行。
例:
$.getJSON("/data-access/sens-config/IPandPortSel",{},function(resp){if(resp.code==0){$.each(resp.data,function(i,obj){option_net_type += addOption(obj);});$("#edit-addr_id").append(option_net_type);addr_idOld = $('#edit-addr_id').val(addr_id);}});
紅色的部分必須在數據返回成功后執行,如果放在if(resp.code==0){}外面((但放在$.getJSON();后面)會存在數據還沒從后臺返回,就已經執行到紅色部分代碼了。
方法二:利用標準ajax傳遞方式
$.ajax({ type : "post", url : "/data-access/manufacturer/deleteBranch", data : data, async : false,//取消異步 success : function(resp){if(resp.code==0){if(ids.length>=currentListNum&¤tPage!=1){currentPage = currentPage - 1;}var para = {mypara :currentPage,startPage : currentPage,};$('div.page-box').data('myPage').setOptions({data: para});} } });
注意:這種方式只是局部的同步傳輸方式,不會對其他傳輸造成影響,是比較安全和推薦的一種
方式。
還存在另外一種方式:
// $.ajaxSettings.async = false;// $.getJSON("/data-access/ip-config/deleteBranch",data,function(resp){// if(resp.code==0){// if(ids.length>=currentListNum&¤tPage!=1){// currentPage = currentPage - 1;// }// var para = {// mypara :currentPage,// startPage : currentPage,// };// $('div.page-box').data('myPage').setOptions({data: para});// }// });// $.ajaxSettings.async = true;
這種方式是全局的,不是很推薦使用,因為會對其他ajax傳輸造成影響。
以上所述是小編給大家介紹的Ajax同步和異步問題淺析,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!
新聞熱點
疑難解答
圖片精選