我有以下代码:
function submitHandler(dialog) {
dialog.$submits.disableBt();
dialog.$message.addMessage("loading", "<li>Contacting Server, please wait ...</li>");
$.ajax({
url: href,
dataType: 'json',
type: 'POST',
data: dialog.$form.serializeArray()
})
.done(onSubmitDone())
.fail(onSubmitFail());
}
此函数有一个dialog对象,该对象是一个如下所示的对象:
{
$modal: $modal,
$form: $modal.find('.form'),
$message: $modal.find('.message'),
$submits: $modal.find('.submit-button'),
href: $form.attr('data-href')
};
我需要将对话框对象发送到onSubmitDone和onSubmitFail函数。以前我没有使用过对象 持有$ modal,$ form等,变量全部可用于外部函数
中包含的所有函数两个问题:
将事物作为对象的一部分传递是否合理,或者我应该将这些变量声明为外部函数的顶部。
如果我确实传递了对象,我该如何将其传递给以下内容:
function onSubmitDone(json) {
json = json || {};
if (json.Success) {
switch (action) {
我知道我的json对象已经通过,但是我如何传递对话框对象?
答案 0 :(得分:1)
将对话框参数传递给ajax回调的一种方法是将其包含在回调定义中,如下所示:
function submitHandler(dialog) {
dialog.$submits.disableBt();
dialog.$message.addMessage("loading", "<li>Contacting Server, please wait ...</li>");
$.ajax({
url: href,
dataType: 'json',
type: 'POST',
data: dialog.$form.serializeArray(),
success: function(data, textStatus, jqXHR) {
onSubmitDone(data, textStatus, jqXHR, dialog);
},
error: function(jqXHR, textStatus, errorThrown) {
onSubmitFail(jqXHR, textStatus, errorThrown, dialog);
}
});
}
我明确了所有回调参数(data,textStatus,jqXHR,errorThrown),但如果你不想这样做,你不需要使用所有这些参数。
答案 1 :(得分:0)
Underscore js是一个独特且非常棒的对象处理和操作库
因为你想传递你的对象是明智的,在函数之外声明它 然后,您可以访问对象的各个部分,并在函数体中使用它们。
您的代码如下所示:
var jsonObj;
function submitHandler(dialog) {
jsonObj=dialog.$form.serializeArray();
dialog.$submits.disableBt();
dialog.$message.addMessage("loading", "<li>Contacting Server, please wait ...</li>");
$.ajax({
url: href,
dataType: 'json',
type: 'POST',
data:jsonObj
})
.done(onSubmitDone(jsonObj))
.fail(onSubmitFail(jsonObj));
}
答案 2 :(得分:0)
关于你的问题,如果传递物体是明智的,尽管你可以,你可能会发现这样做有点麻烦,需要在你需要使用时随身携带变量。我建议将对话框对象封装在submitHandler()函数的父作用域中,以便可以使用submitHandler,onSubmitDone等。
关于你的第二个问题,如果你要传递它以及如何将对话框对象传递给onSubmitDone函数,你总是可以将响应和对话框对象传递给onSubmitDone函数,如下所示:
.done(onSubmitDone(response, dialog))
答案 3 :(得分:0)
如果您将对象作为context
的{{1}}选项传递,则$.ajax
和this
内的onSubmitDone
可以使用该对象:
onSubmitFail