【问题标题】:Show spinner when ajax async is set to false当 ajax 异步设置为 false 时显示微调器
【发布时间】:2015-03-31 05:59:47
【问题描述】:

我使用 ASP.MVC 创建了多屏幕方法 为此,我使用具有多个 div 概念的单个视图(每个 div 是每个屏幕)。

当用户点击下一个/上一个按钮时,它将验证所有客户端和服务器端验证,然后只有它会进入下一个/上一个屏幕(意味着 div.show)

对于我使用 Ajax 调用的服务器端调用,结果将是真或假。基于此,页面将移动到下一个/上一个屏幕。

为此,我在 ajax 调用中设置了 Async = false。这意味着它将等待服务器响应,否则它不能等待服务器响应,从而导致下一个/上一个屏幕。

谁能给我建议一个解决方案,我们如何展示这种方法的微调器..? 这里我们不应该遵循会话的概念,所以我们选择了这个单一视图和多个 div 的方法。

【问题讨论】:

  • 您可以在调用 ajax 请求之前显示加载器图像,并在 ajax 成功方法中隐藏该加载器图像。
  • 我只做那个。但是当我们可以使用 async=false 时,它​​可以冻结用户界面。这样我们就无法显示那个微调器了。当我们可以设置 async=true 或删除该属性时,它工作正常。

标签: javascript jquery ajax asp.net-mvc asp.net-ajax


【解决方案1】:

同步 ajax 调用将始终冻结浏览器。您应该改用 jQuery 中的异步调用 $.when().then();

$.when(function() {
    if (validateFunction()) {
        $.ajax(...);
    } else {
        // code the execute on not valid
    }
})
.then(function () {
    hideSpinner();
});  

在您的服务调用期间保持微调器处于活动状态。

参见文档https://api.jquery.com/jquery.when/

【讨论】:

  • 即使有错误验证,它也会进入下一个屏幕。我们应该验证所有服务器验证,然后只需要移动到下一个屏幕
  • 您可以将您的 Ajax 包装在一个验证函数中,该函数对 $.when() 中的有效信息执行我将更新我的伪代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 2017-01-26
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多