jquery .show仅在结尾处显示

时间:2014-08-18 21:10:39

标签: c# javascript jquery webmethod

我想在执行webmethod的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)
    {
        ...
    }

1 个答案:

答案 0 :(得分:0)

您已通过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)。所以我真的,真的会建议 AGAINST 进行同步通话。