在專案開發過程中,要實現這麼乙個功能
href
="job.html"
onclick
="return check()"
>
就業a>
我們都知道onclick是優先執行於href屬性的,只有onclick返回true才會執行href。接下來看js怎麼寫的
function
check()
else})
return fal;
/*最終發現如果該使用者已經畢業,a標籤沒有任何反應,
}
這就很納悶了,明明返回資料是空,fal變成了ture,怎麼最終返回還是false。這就是同步和非同步的區別了。
首先,ajax預設情況下是非同步的,那什麼是非同步呢
async預設的設定值為true,這種情況為非同步方式,就是說當ajax傳送請求後,在等待server端返回的這個過程中,前台會繼續 執行ajax塊後面的指令碼,直到server端返回正確的結果才會去執行success,也就是說這時候執行的是兩個執行緒,ajax塊發出請求後乙個執行緒 和ajax塊後面的指令碼(另乙個執行緒)
$
(function()
, success :
function
(data)})
;alert
("22222");
});/*在這裡方法中,因為它是非同步的,所以它在通過ajax向後端互動的同時,它還會向下執行js**,就相當於有兩個執行緒
所以這裡是會先彈出"2222",才會彈出"1111",到這個時候,才知道為什麼上面js為什麼總是返回false,因為非同步的時候
它先執行了下面的return fal,就已經返回flase了*/
所以我們只要把async的屬性值改為false就變成同步了
$.post
沒有這個同步非同步設定 ,如果一定要設定非同步,只能在執行$.post
之前加$.ajaxsettings.async = false;
(同步執
行)所以把最上面js改成同步,就可以實現相關功能了
function
check()
else}}
);return fal;
}
同步和非同步的區別
簡單理解:同步的意思是當js**載入到當前ajax的時候會把頁面裡所有的**停止載入,頁面出去假死狀態,當這個ajax執行完畢後才會繼續執行其他**頁面假死狀態解除。
而非同步則這個ajax**執行中的時候其他**一樣可以執行。
非同步:在非同步模式下,當我們使用ajax傳送完請求後,可能還有**需要執行。這個時候可能由於種種原因導致伺服器還沒有響應我們的請求,但是因為我們採用了非同步執行方式,所有包含ajax請求**的函式中的剩餘**將繼續執行。如果我們是將請求結果交由另外乙個js函式去處理的,那麼,這個時候就好比兩條執行緒同時執行一樣。
同步:在同步模式下,當我們使用ajax傳送完請求後,後續還有**需要執行,我們同樣將伺服器響應交由另乙個js函式去處理,但是這時的**執**況是:在伺服器沒有響應或者處理響應結果的js函式還沒有處理完成return時,包含請求**的函式的剩餘**是不能夠執行的。就好比單執行緒一樣,請求發出後就進入阻塞狀態,知道接觸阻塞餘下的**才會繼續執行。
jquery ajax 同步非同步的執行
大家先看一段簡單的 jquery ajax 返回值的js function getreturnajax else 但是我們呼叫這個 getreturnajax 發現始終取得的都是 false,那就是說 return true,return false 根本沒有起作用,在火狐下用 firebug 除錯...
jquery ajax 同步非同步的執行
大家先看一段簡單的jquery ajax 返回值的js function getreturnajax else 但是我們呼叫這個getreturnajax 發現始終取得的都是false,那就是說return true,return false根本沒有起作用,在火狐下用firebug除錯也證明,根本不...
jquery ajax 同步非同步的執行
大家先看一段簡單的jquery ajax 返回值的js function getreturnajax else 但是我們呼叫這個getreturnajax 發現始終取得的都是false,那就是說return true,return false根本沒有起作用,在火狐下用firebug除錯也證明,根本不...