gpt4 book ai didi

javascript - 将 jQuery $.when 和 $.then 与两个函数一起使用

转载 作者:行者123 更新时间:2023-12-02 16:10:39 24 4
gpt4 key购买 nike

如果我在 $.when 中有一个 $.ajax 调用,我知道我可以使用 $.when().then() > 方法。问题是,我在调用 $.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
});
}

最佳答案

$.when 适用于 promises。在您的情况下,ValidateEmailPass 方法应返回延迟,因此您必须更改逻辑如下

  1. ValidateEmailPass 必须返回 $.Deferred 实例。
  2. 验证成功或失败后,在 ValidateEmailPass 方法中解决/拒绝延迟实例。如果您希望在验证失败的情况下不应调用 then 部分,则应拒绝延迟。

引用自 jQuery.when documentation

If a single argument is passed to jQuery.when() and it is not a Deferred or a Promise, it will be treated as a resolved Deferred and any doneCallbacks attached will be executed immediately.

关于javascript - 将 jQuery $.when 和 $.then 与两个函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30254488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com