我有以下JavaScript / jQuery代码,有时可以正常工作,有时不能。

//First AJAX
    $.ajax({
        type: 'GET',
        url: '/API/User/GetCode/'+  $("#email").val(),
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(data)
    }).done(function (data) {
        code = data;
    }).fail(function () {
        code = "";
    });

//Second AJAX
    var data = {
        Email: $("#email").val(),
        Password: $("#password").val(),
        ConfirmPassword: $("#confirmPassword").val(),
        Code: code,
        Type: "External"
    };
    $.ajax({
        type: 'POST',
        url: '/API/Account/Register',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(data)
    }).done(function (data) {
        var result = "Success";
        var message = "Verify your email address to confirm your account.";
        resultPage(result, message);
    }).fail(showError);


在第一个AJAX中,我得到一个代码,并基于此代码称为第二个AJAX。

因为我不想在第一次调用第一个AJAX时设置async=false,所以它工作正常(第一个AJAX返回code,然后使用code参数正确调用第二个AJAX),否则不起作用。

我认为我必须添加一个承诺,但是我不确定在这种情况下如何实现。

任何帮助,将不胜感激。

最佳答案

function getCode() {
    $.ajax({
        type: 'GET',
        url: '/API/User/GetCode/'+  $("#email").val(),
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(data)
    }).done(function (data) {
        sendData(data)
    }).fail(function () {
        code = "";
    });
}

function sendData(code) {
var data = {
        Email: $("#email").val(),
        Password: $("#password").val(),
        ConfirmPassword: $("#confirmPassword").val(),
        Code: code,
        Type: "External"
    };
    $.ajax({
        type: 'POST',
        url: '/API/Account/Register',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(data)
    }).done(function (data) {
        var result = "Success";
        var message = "Verify your email address to confirm your account.";
        resultPage(result, message);
    }).fail(showError);

}
getCode()

09-07 18:39