亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果許多功能依賴于響應,等待 jquery ajax getJSON 完成的最佳方法是什么?

如果許多功能依賴于響應,等待 jquery ajax getJSON 完成的最佳方法是什么?

PHP
慕村9548890 2023-09-15 21:25:47
如果它不僅僅是一個函數,而且還有許多依賴于響應的函數,那么在執行其余代碼之前等待 $.getJSON 完成的最佳方法是什么?更長的解釋:我有一個已經達到一定復雜程度的 JavaScript 應用程序。接近一千行代碼和兩打函數,而且看不到盡頭。該應用程序依賴于存儲在數據庫中的值。更準確地說,我沒有一個函數依賴于所請求的數據,但我的大多數函數都使用這些值和某些點。到目前為止,我在 php 中從數據庫中提取數據,然后將它們回顯到輸入字段中,然后在 js 中讀取這些數據。但隨著越來越多的變量以這種方式傳輸,這變得越來越笨拙,而且看起來不太優雅。我確實在對象中擁有大部分可用數據,并且將它們的成員變量填充到輸入字段中似乎......笨重。我考慮了不同的數據傳輸方式,并出于多種原因選擇了 jquery ajax,尤其是層的干凈分離,而且我已經使用 jquery ajax 來做其他事情了。問題: 我遇到了競爭條件問題。我的一些代碼(依賴于 getJSON 請求的數據)在請求完成之前執行。這破壞了整個應用程序。我已經進行了一些研究,現在知道有幾種方法可以解決這個問題,但是我沒有經驗來判斷應該選擇哪種方法。使用async: false,這仍然有效,并且可能是最容易實現的方法,但它被標記為已棄用,因此我對使用它猶豫不決。將所有內容放入成功處理程序中,例如    $.getJSON("../sender.php", params, function (result) {             //my whole application     });使用承諾。如果我理解正確的話,這意味著我必須包裝我$.when( req1, req2, req3 ).done( ... )在其中使用請求值的每個函數。這似乎不利于可讀性,而且我了解到干凈、可讀的代碼通常比復雜的結構更好。使用同步請求,例如    var request = new XMLHttpRequest();         request.open('GET', '../sender.php', false);         request.send(params);             if (request.status === 200) {                 //fill the variables with the returned values     }完全是別的什么嗎?這些只是我發現的最常見的解決方案,可能還有其他可能性如何做到這一點。我很感謝每一個建議!
查看完整描述

1 回答

?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

由于ajax是異步請求,ajax方法不會等待其他方法執行,調用依賴方法的最佳實踐是ajax調用成功,只有在收到ajax響應后才會執行/調用函數。您可以通過多種方式提出請求

  1. 使用傳統方法或者關閉ajax的異步請求

  2. 創建 ajax 隊列并在收到響應時為另一個請求提供服務 - 您可以存儲狀態并使用 timeinterval 函數每秒運行它們,這將是忙碌的。

我建議您使用 1,因為異步請求可以通過 async: "false" 作為同步請求


查看完整回答
反對 回復 2023-09-15
  • 1 回答
  • 0 關注
  • 108 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號