我在ASP.NET MVC 2页面中使用jQuery。这是一个非常简单的帖子,可以获取日期作为回报。该过程本身运行非常快。我想使用微调图像向用户显示正在发生的事情。在Firefox上一切正常,可以在本地进行测试。但是,在IE 8中,微调器图像显示的时间不够长。它只是闪烁。如果最终用户看不到该进程正在运行/完成的指示,这可能会使最终用户感到困惑。解决此问题的最佳方法是什么?

谢谢。

 <img id="signedout<%: item.Id %>" src="/Content/Images/signed_out.png" alt="Signed Out" title="Signed Out" style="display:none" />
                <div id="ajaxloader<%: item.Id %>" style="display:none;text-align:center"><img src="/Content/Images/ajax-loader.gif" alt="loading..." title="loading..." /></div>

                <script type="text/javascript">
                    $(function () {
                        var id = "<%: item.Id %>";

                        $("#signout" + id).click(function () {
                            if (confirm("Are you sure you want to sign this visitor out?")) {

                                $(this).hide();
                                //$("#signout" + id).hide();
                                $("#ajaxloader" + id).show();

                                var url = '<%: Url.Action("signout") %>';

                                $.ajax({
                                    type: "POST",
                                    url: url,
                                    data: "id=" + id,
                                    success: function (result) {
                                        $("#timeout" + id).append(result);
                                        $("#ajaxloader" + id).hide();
                                        $("#signedout" + id).show();
                                        $("#row" + id).css("background", "#E8E8E8");
                                    },
                                    error: function () {
                                        alert("There was an unexpected error.  Please try again later.");
                                        $("#ajaxloader" + id).hide();
                                        $("#signout" + id).show();
                                    }
                                });
                            }
                        });
                    });
                </script>

最佳答案

您可以在js中设置一个超时时间,这样可以确保直到超时时间结束后才会隐藏微调框:

    function HideLoadingSpinner() {
        $("#ajaxloader" + id).hide();
    }


然后用这个替换您的ajax调用:

    $.ajax({type: "POST",
            url: url,
            data: "id=" + id,
            success: function (result) {
               $("#timeout" + id).append(result);
               setTimeout(HideLoadingSpinner, 2000);
               $("#signedout" + id).show();
               $("#row" + id).css("background", "#E8E8E8");
            },
            error: function () {
                alert("There was an unexpected error.  Please try again later.");
                setTimeout(HideLoadingSpinner, 2000);
                $("#signout" + id).show();
            }
    });


如果由于计时器而出现奇怪的行为,还可以将成功回调中的其他逻辑移到HidingLoadingSpinner函数中。

关于asp.net-mvc - jQuery + Ajax +加载微调器图像=太快了!,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3468740/

10-15 14:02