我有以下代码:
function submitHandler($link, $modal, close) {
var $form = $modal.find('#main-form');
var $submitBt = $modal.find('.block-footer button:contains("Submit")');
var oSubmit = {
$form: $form,
$modal: $modal,
action: $form.attr('data-action'),
entity: $form.attr('data-entity'),
href: $form.attr('data-href'),
row: $link.attr('data-row'),
$row: $('#row_' + $link.attr('data-row')),
$submitBt: $submitBt
};
if (!$form.valid || $form.valid()) {
$submitBt.disableBt();
$modal.removeBlockMessages()
.blockMessage('Contacting Server, please wait ... ', { type: 'loading' });
$.ajax({
url: oSubmit.href,
dataType: 'json',
type: 'POST',
data: $form.serializeArray()
})
.done(function (json, textStatus, XMLHttpRequest) {
json = json || {};
if (json.success) {
submitSuccessModal(oSubmit, json);
if (close == true) {
$modal.closeModal();
if (oSubmit.action == "Create") {
$('#createLink').prop('disabled', false);
}
}
} else {
submitFailModal(oSubmit, json);
}
})
.fail(function (XMLHttpRequest, textStatus, errorThrown) {
setTimeout(function () {
$modal
.removeBlockMessages()
.blockMessage('Could not contact server, please try again', { type: 'error' });
$submitBt.enableBt();
}, 1000);
return false;
});
};
};
将功能从我的 $.ajax 移出并移出到一个用于“完成”的函数和另一个用于“失败”的函数中的最佳方法是什么。我还应该将哪些参数传递给这些函数?我想我最困惑的是我应该如何处理我在代码顶部声明的变量。我是否应该像在 .done 中那样将这些也传递给外部函数,我确实引用了其中的一些函数。
最佳答案
您现在必须使用所谓的匿名函数。您将对匿名函数(没有名称的函数)的引用传递给 done
和 fail
函数。
也许为了更好地组织您的代码(或使这些函数可以与其他代码共享),您需要做的就是为这些函数命名并将它们移到 ajax()
调用之外。我们称它们为 onDone
和 onFail
,当然您可以随意调用它们。
请注意,我在引用它们时没有使用括号,因为我指的是函数对象本身,而不是被调用函数的返回值。
function onDone(json, textStatus, XMLHttpRequest) {
json = json || {};
if (json.success) {
submitSuccessModal(oSubmit, json);
if (close == true) {
$modal.closeModal();
if (oSubmit.action == "Create") {
$('#createLink').prop('disabled', false);
}
}
} else {
submitFailModal(oSubmit, json);
}
}
function onFail(XMLHttpRequest, textStatus, errorThrown) {
setTimeout(function () {
$modal
.removeBlockMessages()
.blockMessage('Could not contact server, please try again', { type: 'error' });
$submitBt.enableBt();
}, 1000);
return false;
}
$.ajax({
url: oSubmit.href,
dataType: 'json',
type: 'POST',
data: $form.serializeArray()
})
.done(onDone) //Reference to onDone, without parenthesis
.fail(onFail);
关于javascript - 如何将我的 Ajax 处理移动到一个函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12454233/