如果我在$.when().then()
方法中进行$.ajax
调用,我知道我可以使用$.when
。问题在于,当我在$.when
方法中调用另一个函数并在$.then
方法中调用另一个函数时,我尝试使用这些方法。我在$.when
方法中调用的函数最终调用$.ajax
方法。
我的问题是,如果我尝试这样做,它就不会回应。我希望它在$.when
方法中执行所有操作,然后继续使用$.then
方法。
我的初始功能(点击按钮时调用)是:
function HideForm(elem) {
var valid = ValidateEmailPass(elem);
var user, email;
if (valid) {
user_info_all.style.display = "none";
ShowMessage(RegErrMsg, "נירשם, אנא המתן..");
var email = document.getElementById('<%= reg_email.ClientID %>'), pass = document.getElementById('<%= reg_pass.ClientID %>'), age = document.getElementById('<%= reg_age.ClientID %>'),
username = document.getElementById('<%= reg_user.ClientID %>');
$.ajax({
type: "POST",
url: 'Register.aspx/Register',
data: '{user: "' + username.value + '", pass: "' + pass.value + '", age: "' + age.value + '", mail: "' + email.value + '"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (validated) {
ShowMessage(RegErrMsg, validated.d);
if (validated.d.indexOf('נרשמת בהצלחה') == -1) {
user_info_all.style.display = "block";
}
},
failure: function (e) {
$(reg_user_v).toggleClass('validated', false);
$(reg_user_v).toggleClass('invalid', false);
$(reg_pass_v).toggleClass('validated', false);
$(reg_pass_v).toggleClass('invalid', false);
$(reg_email_v).toggleClass('validated', false);
$(reg_email_v).toggleClass('invalid', false);
$(reg_age_v).toggleClass('validated', false);
$(reg_age_v).toggleClass('invalid', false);
ShowMessage(RegErrMsg, "אירעה שגיאה בעת ההרשמה, נסה שנית.");
user_info_all.style.display = "block";
}
});
return true;
}
return false;
}
ValidateEmailPass
函数调用了多个ajax请求,因此我尝试将此函数放在$.when
中,而$.then
中的其余函数如下所示:
function HideForm(elem) {
var valid;
$.when(function() {
valid = ValidateEmailPass(elem);
}).then(function() {
// The rest of the function here
});
}
答案 0 :(得分:2)
$。适用于promises
。在您的情况下,ValidateEmailPass
方法应该返回延迟,因此您必须更改逻辑,如下所示
then
部分,则应拒绝延迟。引用jQuery.when documentation
如果将单个参数传递给jQuery.when()并且它不是 延期或承诺,它将被视为已解决的延期和 附加的任何doneCallbacks将立即执行。