[英]jQuery AJAX call initiates without command when .done function added
我正在重寫一系列 jQuery AJAX 請求並且遇到了.done
代碼塊的問題。 我正在嘗試發送 AJAX 請求並在處理數據之前等待響應。 作為指導,我一直在使用以下頁面: http://michaelsoriano.com/working-with-jquerys-ajax-promises-and-deferred-objects/
我還查看了無數堆棧問題以嘗試解決我的問題,但沒有找到任何有幫助的東西。 作為參考,我看過的一些問題如下:
jQuery Ajax 調用未處理。完成
jquery ajax 完成 function 未觸發
對 jquery.ajax.done() function 感到困惑
我注意到,當我創建與上述指南類似的代碼塊時,函數會在頁面加載時運行,而不是在代碼中觸發時運行。 為了隔離故障,我創建了一個簡單的示例,如下所示:
<!DOCTYPE html>
<html lang="en">
<body>
<button type="button" onclick="getData()">Click me</button>
</body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
//Commented out due comment below
/*function getData() {
console.log('enter getData');
return $.ajax({url:'./testajax.html',type:"POST"});
}
getData().done(function(data){
console.log('enter done');
alert(data);
});*/
function getData() {
console.log('enter getData');
$.ajax({ url: './testajax.html', type: "POST" })
.done(function (data) {
console.log('enter done');
alert(data);
});
alert('after');
}
</script>
</html>
我期待當我的示例頁面加載時,什么都不會發生,因為除非單擊按鈕,否則不會觸發執行getData()
function。 但是,當我加載頁面時,我的控制台會記錄“輸入 getData”,然后“輸入完成”,並且我會收到一條警報,其中包含我的./testajax.html
頁面的內容(只是一個字符串)。 此外,當我單擊該按鈕時,它會進入getData()
但不會觸發getData().done
function,因此不會收到任何警報。
有誰能在這里指導我走上正確的軌道並幫助我防止getData()
function 在頁面加載時執行,而是讓按鈕單擊執行 AJAX 請求,等待結果,然后執行.done
中的代碼堵塞?
您擁有的getData()
表達式會在頁面加載時立即調用 function。 然后將.done
處理程序附加到它。
聽起來您想要一個調用$.ajax
並附加.done
的 function ,例如:
function getData() {
console.log('enter getData');
$.ajax({ url: './testajax.html', type: "POST" })
.done(function (data) {
console.log('enter done');
alert(data);
});
}
然后將getData
作為事件處理程序附加到某處。
不要使用內聯處理程序。 使用.addEventListener
或 jQuery 的.on('click'
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.