javascript - Jquery 使用 ajax 在提交表单中使用 addclass

标签 javascript jquery ajax

提交表单时,我需要运行 addclass 并显示加载动画,然后运行 ​​ajax 但是在ajax中添加false到async时,首先运行ajax,然后加载anamiatin执行。

$('.form-login').submit(function(e) {

$('#alert-massages').html("").removeClass("alert alert-warning");
 $(".btn-login").addClass('loading');
 $(".btn-login").attr('disabled','disabled');

 if(formLogin.valid()) {

  $.ajax({
    url : "<%=checkOtpLoginUrl %>",
    dataType : "json",
    async: false,
    data : {
        "<%=renderResponse.getNamespace() %>msisdn" : $("#<%= renderResponse.getNamespace() %>msisdn").val(),
        "<%=renderResponse.getNamespace() %>password" : $("#<%= renderResponse.getNamespace() %>password").val(),
        "<%=renderResponse.getNamespace() %>captchaText" : $("#<%= renderResponse.getNamespace() %>captchaText").val(),
        "<%=renderResponse.getNamespace() %>rememberMe" : $("#<%= renderResponse.getNamespace() %>remember").val()},
    method : "post"

    }).done(function(data) {

        if (data.result) {

最佳答案

问题就在这里:

async: false

一方面,这已被弃用(或者至少很快就会被弃用?),并且在最近或 future 的浏览器更新中不太可能得到支持。首先,这始终是一种不好的做法,并且会使您的代码违背 JavaScript 原则。不要使用它。

但是更重要的是,它明确告诉您的浏览器将此异步操作设为阻塞调用。这意味着在操作完成之前浏览器无法执行任何 UI 更新。修改 DOM 元素的类是 UI 更新。底层 DOM 本身正在更新,但在所有阻塞操作完成之前,浏览器无法在屏幕上呈现该更改。

使您的异步操作异步。删除async: false。这将允许浏览器进行您想要的 UI 更新。

如果有一些其他原因导致您认为需要使用async: false,那么这就是您需要解决的实际问题。目前,您的代码只是通过创建另一个问题来隐藏该问题。

关于javascript - Jquery 使用 ajax 在提交表单中使用 addclass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54007205/

相关文章:

javascript - 修改函数以替换文本以及按下按钮时添加克拉

php - 保护 GET 调用

javascript - 流联合类型不会出错

javascript - 如何以美观的方式将 <select> 和 &lt;input&gt; 结合起来?

jquery - Bootstrap 垂直菜单 - 单击另一个菜单项时关闭当前菜单项

使用隐藏 IFrame 下载 PHP 文件而不保存

jquery - 将ajax调用的结果放入变量中

javascript - 将Html.Partial的结果设置为js字符串

c# - 如何以编程方式执行点击事件?

javascript - Angularjs 模式的复选框表现得很奇怪