簡體   English   中英

jQuery AJAX 調用在沒有命令的情況下啟動 when.done function 添加

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM