我正在使用引导程序和 JQuery。我想知道在'$.ajax beforeSend'中进行 ajax 调用之前是否可以调用引导模式对话框?我想在提交表单之前收集用户评论。我的页面上有几个按钮需要这种行为。所以,我想让它更通用。
谢谢
我正在使用引导程序和 JQuery。我想知道在'$.ajax beforeSend'中进行 ajax 调用之前是否可以调用引导模式对话框?我想在提交表单之前收集用户评论。我的页面上有几个按钮需要这种行为。所以,我想让它更通用。
谢谢
由于 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');
}
我建议使用 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()