在beforeSend之后调用JQuery Ajax成功函数

时间:2013-01-29 23:32:03

标签: javascript jquery ajax blockui

我有以下javascript:

function someFunction(string) {
    $.ajax({
        type: "GET",
        url: "some_endpoint_returning_json",
        async: false,
        data: "param=" + string,
        beforeSend: function() {
            $.blockUI({ message: '<h1><img src="static/busy.gif" /> Just a moment...</h1>' });
        },
        complete: function () {
            $.unblockUI();
         },
        dataType: "json",
        success: function(data) {
            window.alert(data.status);
        }
    });
}

我希望UI在发送ajax请求之前使用包含的消息进行阻止,然后删除消息,取消阻止ui,然后执行成功功能。

目前正在发生的事情:

  1. UI阻止,但不显示消息
  2. 弹出成功窗口提示
  3. 确认警报窗口后,BlockUI消息会弹出一瞬间,然后UI取消阻止,页面返回初始状态

1 个答案:

答案 0 :(得分:5)

如果将async设置为false,浏览器将在提供ajax请求时暂停所有内容的执行。虽然beforeSend在发送ajax请求之前执行,但同步请求可能会很快发生,浏览器实际上不会刷新屏幕并显示$.blockUI更改。在ajax完成后(当它们被立即删除时),你确实可以在很短的时间内看到它们。

如果您必须使用异步,您可以通过单独调用$.blockUI并在启动ajax请求之前设置短暂超时(可能是100 MS)来解决此问题。