台灣最大程式設計社群網站
線上人數
3031
 
會員總數:243667
討論主題:188258
歡迎您免費加入會員
討論區列表 >> AJAX / JSON / jQuery >> 關於多個ajax,並未做同步設定時的等待情況
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
關於多個ajax,並未做同步設定時的等待情況
價值 : 300 QP  點閱數:388 回應數:12

樓主

浩瀚星空 版主
中級顧問
39766 78
14820 5433
發送站內信

捐贈 VP 給 浩瀚星空
這是我的js中其中一個函數,有多個money_btn。



目前問題是這樣。由於是做在頁面載入時就會去做此動作。
但發生一件很奇怪,無法理解的問題。
就是我要切頁時。一定得要等到ajax運行完成才可以切頁。
不過我沒設定async。理當不需要等待才對。
(雖然後來為了確定問題,還是直接指定了非同步的參數進去)

為了怕是否是程式的問題。我還故意如上面的方式來註解掉程式碼。只保留console.log來確定運行的情況。

但還是一樣得要等所有的ajax運行完成後才能切頁。(我的天啊,這什麼怪問題)
目前實在搞不對,只好來問看看各位大神有無這樣的情況發生。
及可能還有沒有我其它沒注意到的東西存在。

搜尋相關Tags的文章: [ ajax ] ,
本篇文章發表於2018-06-07 13:01
== 簽名檔 ==
浩瀚星空站長(http://www.ihstar.com)
星空客棧 http://tech.ihstar.com 一個開發者專業平台
主機空間承租、網頁設計開發、電腦維修組裝
連絡資料:hstaryoching#gmail.com (請將#改掉,你懂的)
我email跟skype都是同一個帳號。如連絡請說明你是從此過來的

新人發問笑話
「不用跟我說543,跟我說怎麼做就好」我不是你免費的打手。
(po一段程式碼)然後問,「問題在哪??」問神吧,我可以借你2個50。但記得還我2張500。
「這功能該怎麼做,最好提供範例」(飯粒)嗎??我飯桌上多的是,盡量去拿。
主題:「請求救、請救救我....」打119比較快。
「如題....」嗯~~~的確如題,答案也「如題」。
「為何這段程式碼出錯?」(未po錯誤訊息)啊!!因為人品問題!!
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

淺水員
檢舉此回應
「切頁」是指使用者點超連結嗎?
我試不出來您說的狀況
目前想到的幾個可能

1. jQuery 某版本才會發生(覺得不大可能)
2. js 忙碌中導致瀏覽器忙不過來(也不大可能)
3. 要前往的頁面回應時間較長,讓人誤以為是等待 ajax 回應
4. 切換頁面方式是用 js ,如果是這樣在前面加個 console.log 確認有跑到這邊
本篇文章回覆於2018-06-07 15:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
1.這的確不太可能

2.這也不太可能沒錯。我將async改為flase。確實會有js運行中的情況。

3.這也不對。因為我有試了不讓他跑那段ajax_get_money函式。是瞬切的。

4.單純的a連結。沒用js控制。但為了判斷。我有故意用的href的判斷。確實是會等待ajax跑完後才會跑。
不過~~~~我並未用js來做href動作。只是單純的a連結。

所以一整個很無奈。真的不知道發生了什麼事。
我目前還在查原因。
本篇文章回覆於2018-06-07 16:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

淺水員
檢舉此回應
如果把那個 a 連結到其他主機的網站(例如 google)呢?
要是卡住,那問題應該是客戶端
如果沒卡住,那問題可能就是在伺服器
本篇文章回覆於2018-06-07 17:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

淺水員
檢舉此回應
下面是我模擬出可能發生的情形
這是伺服器忙碌導致請求下一頁「塞車」

test.php:被 ajax 請求的對象


index.php:主頁面


main.js:用 1F 的 code ,只是改一下 ajax 網址

本篇文章回覆於2018-06-07 23:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
我其實也有往這一方面去想。

有做了一下測試。証實了使用ajax的情況下。再未回應回來前,瀏覽器的確會等待反應完才會運行。
可以從network中明確的發現。其實轉頁指令已經發出去了。只是會變成等待中的指令。
原來正在跑的ajax命令要等回應完成後。才會去運行那個轉頁指令。
本篇文章回覆於2018-06-08 14:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

淺水員
檢舉此回應
我是這樣解讀的:
從network中明確的發現。其實轉頁指令已經發出去了。只是會變成等待中的指令。

所以其實點連結是有效的,只是因為伺服器處理不過來
伺服器忙著處理 ajax 而無暇回應新頁面的請求
客戶端因為還沒收到新頁面的請求所以就停留在原本的頁面
原來正在跑的ajax命令要等回應完成後。才會去運行那個轉頁指令。

伺服器處理完 ajax 後才處理新頁面的請求
所以客戶端就以為是 ajax 卡住新頁面
而真實情況是伺服器那邊在塞車
也就是說客戶端的程式沒問題
需要改善的是伺服器那邊的狀況
本篇文章回覆於2018-06-08 15:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
最有價值解答

淺水員
檢舉此回應
文句修正:
「客戶端因為還沒收到新頁面的請求所以就停留在原本的頁面」
改為
「客戶端因為還沒收到新頁面的回應所以就停留在原本的頁面」
本篇文章回覆於2018-06-08 15:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
目前測試的結果的確是如此了,我有故意放了一個不在同域名的a連結。
點這個a連結,就會馬上切過去的。

果然你的想法是正確的。並非是在等待ajax。而是在等待換頁的回應因素。

雖然還是無解,但至少找到原因了。
本篇文章回覆於2018-06-08 16:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

淺水員
檢舉此回應
伺服器端不能動嗎?
多加一個 api ,可以一次查詢複數資料
這樣就可以把 ajax 減少為 1 個

如果伺服器端不能動
那就在客戶端限制一次請求的 ajax 數量
前一個 ajax 回應後才觸發下一個 ajax
例如:

本篇文章回覆於2018-06-08 20:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
其實只要修改伺服器的回應等待就行了。
因為是客戶的機器。所以我才會說無解的。

就算換成你說的步進ajax動作。還是會很奇怪的。
本篇文章回覆於2018-06-12 14:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

Jungle
檢舉此回應
你的ajax的處理事件的操作 運算 都是在後台運作嗎?

如果是的話我的感覺好像是你在後台處裡的東西比較多,所以導致伺服器塞車等等的

如果真的是這樣,你可以考慮用多工程序 就是大家稱的: 多執行緒

可以參考看看,很多程式都是因為一次處理太多東西 導致感覺伺服器頓頓的或卡慢

多執行緒就可以邊執行運算編執行前台的轉頁效果,可是其實程式後台的運算其實還在運算 但使用者看不出來就是了



如果不是這個問題,請忽略此回覆。
本篇文章回覆於2018-06-13 15:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
@Jungle

其實你說的很對。但重點不是在程式碼的問題。而是主機伺服設定上的問題。
我指的無解的原因不是真的無解。無解的原因是這無法用程式來解決這個問題。
只能請客戶他們的主機人員去修正設定才行。

基本上因為我本身自已的主機,已經是多執行序了。所以沒遇上這個問題過。
算是第一次在他們主機上發生的問題,讓我一時之間感到莫名奇妙。
本篇文章回覆於2018-06-15 10:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.