【问题标题】:jquery .show shows only at the endjquery .show 仅在最后显示
【发布时间】:2014-08-18 21:10:38
【问题描述】:

我想在执行 web 方法的 ajax 命令之前显示加载 div,并在命令末尾关闭。 div 仅在 ajax 命令执行结束时出现。

以下代码块。

$("#dvUpProgress1").show();
$.ajax({
            type: "Post",
            url: "producao.aspx/GravarListaSalvar",
            data: "",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: false,
            success: function (obj) { }
        });

在后面的代码中:

[WebMethod]
    public static string GravarListaSalvar(string IdAutorizacaoProducaoGarantiaQualidade, string IdEtapa, string IdSubEtapa, string IdUsuarioLogado, string NomeCampo, string NomeAmigavel, string Resposta, string IdCampo)
    {
        ...
    }

【问题讨论】:

  • 您已通过async: false 将您的 POST 请求设置为同步。浏览器在脚本完成运行之前不会渲染内容 - 这只会在您的帖子完成后发生。
  • @entropic 是对的。他应该把它作为答案发布......
  • @LcSalazar 计划在我有更多时间再写一点的时候。不过谢谢你的提醒。

标签: c# javascript jquery webmethod


【解决方案1】:

您已通过async: false 将您的 POST 请求设置为同步。浏览器在脚本完成运行之前不会渲染内容 - 这只会在您的帖子完成后发生。

如果你想让进度条显示出来,你需要异步实现你的调用,这样浏览器就可以在服务器处理请求的同时渲染加载的 div。在当前例程中调用之后所做的任何事情,您都将转到您创建的success 函数。您的 javascript 应该像这样更新:

$("#dvUpProgress1").show();
$.ajax({
    type: "Post",
    url: "producao.aspx/GravarListaSalvar",
    data: "",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    async: true,
    success: function (obj) {
        // Here is where the rest of your code should go 
    }
});

您会注意到我将async 更改为true,它告诉浏览器异步处理调用,释放浏览器来呈现进度条。

如果您绝对必须同步调用,您始终可以通过执行类似操作来实现setTimeout

$("#dvUpProgress1").show();
setTimeout(function () {
    $.ajax({
        type: "Post",
        url: "producao.aspx/GravarListaSalvar",
        data: "",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        success: function (obj) {
            // Here is where the rest of your code should go 
        }
    });
}, 100);

.. 但是你真的失去了 AJAX 开发的异步处理的所有好处(毕竟,AJAX 代表异步 JS 和 XML)。所以我真的,真的会建议反对进行同步调用。

【讨论】:

  • 之前的异步是错误的,但没有工作。我也使用了 setTimeout,但没有使用 ajax 参数。我将以这种方式测试 setTimeout。谢谢。
  • 重申一下,异步参数确实应该为真。您希望异步运行调用,而不是相反。
  • 我按照您指示的方式尝试了 async true 和 false ,并且 div 仅在处理结束时出现。不管怎么说,还是要谢谢你。还有其他建议吗?
  • 你能在 jsfiddle 上重现这个问题吗?
  • 经过几次尝试,我发现在 Chrome 中不起作用,在 Firefox 中可以正常工作。有什么建议可以在这两种浏览器中工作吗?
猜你喜欢
  • 2020-03-15
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多