我有以下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
参数),否则无效。
我认为我必须添加一个承诺,但我不确定如何在这种情况下这样做。
任何帮助都将不胜感激。
答案 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 = "";
});