之前一直在寫JQUERY代碼的時(shí)候遇到AJAX加載數(shù)據(jù)都需要考慮代碼運(yùn)行順序問(wèn)題喇闸。最近的項(xiàng)目用了到AJAX同步。這個(gè)同步的意思是當(dāng)JS代碼加載到當(dāng)前AJAX的時(shí)候會(huì)把頁(yè)面里所有的代碼停止加載,頁(yè)面出去假死狀態(tài)苛秕,當(dāng)這個(gè)AJAX執(zhí)行完畢后才會(huì)繼續(xù)運(yùn)行其他代碼頁(yè)面假死狀態(tài)解除颖杏。
而異步則這個(gè)AJAX代碼運(yùn)行中的時(shí)候其他代碼一樣可以運(yùn)行。
jquery的async:false,這個(gè)屬性
默認(rèn)是true:異步政溃,false:同步趾访。
$.ajax({
type: "post",
url: "path",
cache:false,
async:false,
dataType: ($.browser.msie) ? "text" : "xml",
success: function(xmlobj){
}
});
有了這個(gè)屬性可以相對(duì)的減少代碼運(yùn)行書序問(wèn)題,但是如果用的太多董虱,頁(yè)面假死次數(shù)太多扼鞋。這樣反而導(dǎo)致用戶體驗(yàn)不佳~申鱼!
$.Ajax()中 async 和success的官方的解釋:
async
Default:
true
By default, all requests are sent asynchronous (e.g. this is set to true by default). If you need synchronous requests, set this option to false. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active.
success
A function to be called if the request succeeds. The function gets passed two arguments: The data returned from the server, formatted according to the 'dataType' parameter, and a string describing the status. This is an
在這里,async默認(rèn)的設(shè)置值為true云头,這種情況為異步方式捐友,就是說(shuō)當(dāng)ajax發(fā)送請(qǐng)求后,在等待server端返回的這個(gè)過(guò)程中溃槐,前臺(tái)會(huì)繼續(xù) 執(zhí)行ajax塊后面的腳本匣砖,直到server端返回正確的結(jié)果才會(huì)去執(zhí)行success,也就是說(shuō)這時(shí)候執(zhí)行的是兩個(gè)線程昏滴,ajax塊發(fā)出請(qǐng)求后一個(gè)線程 和ajax塊后面的腳本(另一個(gè)線程)例:
$.ajax({
type:"POST",
url:"Venue.aspx?act=init",
dataType:"html",
success:function(result){ //function1()
f1();
f2();
}
failure:function (result) {
alert('Failed');
},
}
function2();
在上例中猴鲫,當(dāng)ajax塊發(fā)出請(qǐng)求后,他將停留function1()谣殊,等待server端的返回拂共,但同時(shí)(在這個(gè)等待過(guò)程中),前臺(tái)會(huì)去執(zhí)行function2(),也就是說(shuō)蟹倾,在這個(gè)時(shí)候出現(xiàn)兩個(gè)線程匣缘,我們這里暫且說(shuō)為function1() 和function2()。
當(dāng)把a(bǔ)syn設(shè)為false時(shí)鲜棠,這時(shí)ajax的請(qǐng)求時(shí)同步的肌厨,也就是說(shuō),這個(gè)時(shí)候ajax塊發(fā)出請(qǐng)求后豁陆,他會(huì)等待在function1()這個(gè)地方柑爸,不會(huì)去執(zhí)行function2(),知道function1()部分執(zhí)行完畢盒音。