如果頁面上的表單當前正在提交,我有一個競爭條件,我不希望發生AJAX調用。有沒有辦法知道HTML表單當前正在提交?
我寧願不改變表單的代碼。
我正在考慮將事件處理程序附加到每個表單元素,以便onsubmit它會增加一個計數器,然後onreadystatechange遞減計數器。
然後在AJAX調用之前,請檢查以確保計數器在觸發前爲零。
但有更簡單的方法,如(僞代碼):
form.isSubmitting
編輯:
競爭狀態,因爲每說JavaScript的不是。這是由服務器端響應這些操作的順序而發生的。
爲了讓您更廣泛問題的一個想法:
設置cookie的形式後返回時。 在AJAX調用中(需要每隔X秒發生一次)...服務器端(如果表單發生了)期望cookie被設置。
有時....
如果在表單提交返回(並設置cookie客戶端)的延遲,觸發AJAX調用不發送的cookie回來。
服務器期望cookie,因爲就其而言表單發佈已成功。
但是,我需要控制客戶端以確保按照規定的方式執行操作。
所以正確的JavaScript本身不會導致競爭條件,但(就我測試顯示的那樣) - 提交和返回POST/AJAX調用導致競爭條件在我的特定情況下。
沒有的setInterval()允許多個線程同時運行? – Jez 2010-11-03 14:30:44
否 - 每次定時程序被調用時,它就像從一個按鈕點擊事件循環 - 它永遠不會在任何種類的另一事件循環的中間發生 – Pointy 2010-11-03 14:43:53
現代「網絡工作者」其實辦法有多個線程,但他們從其他代碼「防火牆」很好,所以你仍然不能有競爭條件 – Pointy 2010-11-03 14:44:32