如何从我的ajax函数传递除json之外的对象?

时间:2012-10-07 03:46:58

标签: javascript jquery

我有以下代码:

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对象已经通过,但是我如何传递对话框对象?

4 个答案:

答案 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}}选项传递,则$.ajaxthis内的onSubmitDone可以使用该对象:

onSubmitFail