簡體   English   中英

jQuery .done() .fail()

[英]jQuery .done() .fail()

我們在這里想要的是操作createSite函數的預期返回值{ac:failed}所以當它失敗時.fail(failOption)將被執行 else sendMail / .done(sendMail)函數將執行並仍然保持來自createSite函數的數據這是{bar1:"foo1",bar2:"foo2",bar3:"foo3"}

var cSite = createSite(); //expected return if failed is {ac:"failed"} else success expected return will be {bar1:"foo1",bar2:"foo2",bar3:"foo3"}


var cSite = createSite();
cSite.done(sendMail).fail(failOption).always(alwaysOption);

function createSite() {
    return $.ajax({
        url: 'something.php',
        method: 'POST',
        data: "template_id=" + template_id + "&original_url=" + original_url + "&email=" + email + "&first_name=" + first_name + "&last_name=" + last_name
    }); //ajax
} //createSite

jQuery 的ajax承諾的fail部分是在我想象的 200 范圍以外的 http 狀態上觸發的,例如400: bad request500: internal server error

如果您無法從something.php傳遞失敗狀態,則有兩種選擇。 對於 jQuery 1 和 2:

function createSite() {
    var promise = $.Deferred();

    $.ajax({
        url: 'something.php',
        method: 'POST',
        data: "template_id=" + template_id + "&original_url=" + original_url + "&email=" + email + "&first_name=" + first_name + "&last_name=" + last_name
    }).then(function(data) {
        if(data.ac === 'failed') {
            promise.reject(failed)
        } else {
            promise.resolve(data);
        }
    })

    return promise;
}

在較新版本的 jQuery (3+) 中,您還可以拋出錯誤以觸發fail

function createSite() {
    return $.ajax({
        url: 'something.php',
        method: 'POST',
        data: "template_id=" + template_id + "&original_url=" + original_url + "&email=" + email + "&first_name=" + first_name + "&last_name=" + last_name
    }).then(function(data) {
        if(data.ac === 'failed') {
            throw data
        } else {
            return data
        }
    });
}

請注意,這完全未經測試。 deferred的文檔在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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