0

我正在使用引导程序和 JQuery。我想知道在'$.ajax beforeSend'中进行 ajax 调用之前是否可以调用引导模式对话框?我想在提交表单之前收集用户评论。我的页面上有几个按钮需要这种行为。所以,我想让它更通用。

谢谢

4

2 回答 2

1

由于 javascript 中的异步事件模型,您不能推迟从内部发送 ajax 请求beforeSend。一旦beforeSend执行,您必须“延迟” ajax 请求的唯一机会是通过从回调中返回 false 来完全取消它。

因此,虽然您可以跟踪一个状态变量,该变量知道表单是否准备好提交(beforeSend在表单未准备好时返回 false),但您最好在创建 ajax 请求开始之前进行这些验证检查.

// why do this
$.ajax('/path', {
    beforeSend: function () {
        if (formIsNotReady()) {
            showModal();
            return false;
        }
    }
});

// when you can do this
if (formIsNotReady()) {
    showModal();
} else {
    $.ajax('/path');
}
于 2013-07-27T15:40:21.507 回答
1

我建议使用 jQuery 的Deferred对象(参见http://api.jquery.com/category/deferred-object/)。以下是按钮事件处理程序的伪代码:

$('#theButton').on('click', function() {
    var dfd = $.Deferred();

    // Code to show modal dialog here.
    // Pass dfd to the dialog, and have it call dfd.resolve() 
    // when the user has finished, or dfd.reject() in case the
    // user does not complete the form.

    dfd.done(function() {
        // Ajax call here
    });
});

仅当有人调用Deferred 对象上dfd.done()的方法时,才会调用作为参数传递的函数。resolve()

于 2013-07-27T15:45:54.487 回答