[英]Unwanted repeats of ajax/jquery POST request
我遇到了一個問題,由於我無法理解的原因,我的帖子請求被重復。 我正在使用 jQuery POST 請求將表單提交到 php 腳本,以將其插入 SQL 數據庫。
它只在某些情況下發生,而且並非始終如一。 9/10 次按預期工作,但有時 ajax 調用重復 2 或 3 次。
重復代碼塊:
function submitLog(){
let log = document.getElementById('logContent').value;
let project = document.getElementById('logger_active_project').innerHTML;
let category = document.getElementById('categorySelect').value;
let projectID = document.getElementById('logger_active_project_id').value;
let submit = document.getElementById('submit');
submit.disabled = true;
console.log('starting ajax post request');
$.post('./includes/logger/scripts/add_log.php', {
log:log,
project:project,
category:category,
project_id:projectID
}, function(data, status){
document.getElementById('logContent').value= "";
submit.disabled = false;
console.log('ajax callback fired.' + data);
})
} 編輯:
它似乎只在與以下 function 一起使用時才會發生:
function submitLogByEntering(){ let log = document.getElementById('logContent');
log.addEventListener("keyup", function(event) {
// Number 13 is the "Enter" key on the keyboard
if (event.keyCode === 13) {
// Cancel the default action, if needed
event.preventDefault();
submitLog();
}
});
}
當使用按鈕復制問題時,我無法讓它重復。
提前非常感謝您提供的任何提示,讓我找到正確的方向來解決這個熱點問題!
它很可能submitLog()
的偵聽器。
檢查您沒有使用會多重觸發的偵聽器。
如果檢查太多,只需在submitLog()
之外設置一個測試變量,請將其設置為 true 並測試是否為 true,然后觸發 ajax。 然后在您的發布請求后將其設置為 false 。 這將阻止重復的按鈕按下等發生或聽眾中任何有趣的事情。
如果您需要重新觸發 function 對變量設置超時(或在 ajax 完成后設置)以將其重置為真。
例子:
var test = true; function submitLog() { if (test) { let log = document.getElementById('logContent').value; let project = document.getElementById('logger_active_project').innerHTML; let category = document.getElementById('categorySelect').value; let projectID = document.getElementById('logger_active_project_id').value; let submit = document.getElementById('submit'); submit.disabled = true; console.log('starting ajax post request'); $.post('./includes/logger/scripts/add_log.php', { log: log, project: project, category: category, project_id: projectID }, function (data, status) { document.getElementById('logContent').value = ""; submit.disabled = false; console.log('ajax callback fired.' + data); }); test = false; setTimeout(function () { test = true; }, 5000); } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.