async預設是true, 即為非同步方式, $.Ajax執行後, 會繼續執行ajax後面的腳步, 直到伺服器端返回資料後, 觸發$.Ajax裡的success方法. 這時候執行的是兩個線程.
代碼如下 |
複製代碼 |
var temp; $.ajax({ async: false, type : "POST", url : defaultPostData.url, dataType : 'json', success : function(data) { temp=data; } }); alert(temp); |
這個ajax請求則為同步請求,在沒有傳回值之前,alert(temp)是不會執行的。
如果async設定為:true,則不會等待ajax請求返回的結果,會直接執行ajax後面的語句。
附註:
非同步就相當於將ajax 請求以一個線程的方式啟動
同步就相當於將ajax 請求逐步執行只有ajax 請求執行文筆後才會執行後面的語句。
例子
代碼如下 |
複製代碼 |
<form action="1.jsp"> <input type="text" id="tel" flag="0"/> <input type="text" id=www.111cn.net flag="0"/> <input type="submit" value="提交" /> </form> <script> $('#tel,#email').blur(function(){ var _this=this; $.ajax({ type:'POST', url:'', //async:false, dataType:'text', //data:'', success:function(data){ if(data==true){ $(_this).attr('flag',1) } } }); }); $('form').submit(function(){ var isSubmit=true; var input=$('input:text'); for(var i=0; i<input.length;i++){ input.eq(i).blur(); //點擊提交 重新做一次驗證 if(input.eq(i).attr('flag')==0){ isSubmit=false; } } alert(isSubmit); return isSubmit; }); </script> |
碼如上,點擊“提交”,所有輸入框做一次ajax驗證,如果都返回true,則提交表單;
如果不注釋掉:async:false 沒問題,但注釋掉後,因為是非同步傳輸,submit的時flag值還沒來得及返回,所以都為false
表單提交不了
求:如果選擇預設的async:true 該怎麼判斷,然後提交
ajax的async參數導致Firefox瀏覽器閃屏
我的出現閃屏 的情況是:
$.ajax({
type: "post",
url: "index.php",
data: { },
async:false,
beforeSend:function(){},
success: function(data){
//...
},
complete:function(){}
});
在這裡, 我的async設為了false, 原意是想返回資料了再執行$.Ajax後面的指令碼, 沒想到這個地方卻導致了在Firefox瀏覽器下出現閃屏.(Firefox 11.0), 捲軸下拉到底部觸發ajax的情況.閃屏
最後將async:false注釋掉, 也就是async為ture的情況下, 成功解決了Firefox瀏覽器捲軸下拉到底部觸發ajax出現閃屏的問題.