關於ajax的非同步同步問題
之前一直對於ajax同步和非同步不是很理解,直到在實踐中遇到問題才明白這是怎麼一回事。那麼就根據這個實際的問題來說說自己對ajax非同步與同步的理解。
問題的起因是這樣的,在做乙個專案當中有這樣乙個需求:**上的一些鏈結有內外網顯示許可權,有些鏈結當用內網訪問時可以點開檢視,用外網點開彈出提示說:ip限制。然後取消預設的鏈結跳轉行為。
我的解決思路就是給a標籤統一新增乙個click事件。事件中判斷該條訊息是否允許開啟,那麼就要獲取客戶端的ip才可以。我就用ajax訪問伺服器呼叫後台方法獲取了客戶端的ip,然後將ip傳給前台。然後判斷這個ip是否在內網網段內,如果在內網網段則鏈結跳轉,如果不在則去掉預設事件,頁面不發生跳轉。
實現使用jquery的ajax方法,**如下:
$.ajax(
else
}
});
但問題來了,確實獲取到了ip,也可以做出正確的判斷,但頁面依然可以正常跳轉。起初一直是以為是預設事件取消的**不對,或是相容性問題。但做了相容處理之後問題依然沒有得到解決。通過除錯測試才發現這是因為**的執行時間不一致,獲取到ip之前還沒有進行判斷的時候後面頁面跳轉的**已經執行了,然後才進行判斷彈出禁止訪問,去掉預設事件。才意識到這是ajax的非同步執行導致的。
那麼如何解決呢?
在jquery的ajax方法中,有這麼乙個引數設定ajax的非同步與同步,async.true代表非同步,false代表同步。到此,才明白原來非同步與同步的區別在這裡:ajax非同步訪問是指發起請求後在還沒得到回應前繼續執行後面的js**,那麼在這時就沒有獲取到ip就無法進行正確的判斷。然而同步就是ajax向後台發起請求,前台的js**就會阻塞在這裡,直到收到響應的時候才會繼續執行。這也是為什麼很多ajax呼叫裡的賦值不起作用的原因,現在終於搞明白了~
修改後的**如下:
$.ajax(
else
}
});
這個是jquery當中的解決辦法,那麼原生的ajax也可以去設定的, 在ajax物件的open()方法中第三個引數就是設定同步非同步的。true代表非同步,false代表同步。
ok~,又積累了一點經驗。以後就可以根據自己的需求去決定同步請求還是非同步請求了。
ajax同步非同步
ajax 同步和非同步區別?我們在使用 ajax 一般都會使用非同步處理。非同步處理呢就是我們通過事件觸發到 ajax,請求伺服器,在這個期間無論伺服器有沒有響應,客戶端的其他 一樣可以執行。同步處理 我們通過實踐觸發 ajax,請求伺服器,在這個期間等待伺服器處理請求,在這個期間客戶端不能做任何處...
ajax的同步 非同步 jquery同步
同步請求將鎖住瀏覽器,使用者其它操作必須等待請求完成才可以執行。看下邊的js function 如果其它函式呼叫這個函式的時候我們會發現先alert last 之後再 alert msg msg 不是順序執行的,這是因為jquery ajax預設的是非同步的不等ajax執行完就繼續執行其餘 這樣的話...
關於js中Ajax的同步 非同步使用
下面乙個簡單的例子,說明前後端互動中,ajax同步和非同步的使用 1 設定簡單的乙個div,包含觸發事件 companytype hidden id branchhidden name branchhidden value hidden id companytype name companytype...