第二个AJAX基于第一个结果

时间:2017-01-06 07:02:57

标签: javascript jquery ajax

我有以下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然后正确调用第二个AJAX code参数),否则无效。

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

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:2)

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() 

答案 1 :(得分:1)

将第二个ajax请求包含在某个函数中,并在第一个ajax请求完成时调用该函数。

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

function SecondAjax(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);

}
FirstAjax();

答案 2 :(得分:1)

  

将第二个ajax放在ajax done方法

//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;
     //Second AJAX
      var nextData = {
         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(nextData)
    }).done(function (data) {
      var result = "Success";
      var message = "Verify your email address to confirm your account.";
      resultPage(result, message);
    }).fail(showError);
}).fail(function () {
    code = "";
});