jQuery / Javascript:2个函数调用行,等待对方完成?

时间:2012-02-18 12:30:15

标签: javascript jquery ajax

我知道这可能听起来很傻但我不知道该怎么做......

$('#someButton').click(function(e) {
    e.preventDefault();

    // Do ajax stuff
    triggerAjaxSubmit('#signUpForm', false);


    modalSlide(modal, $('.loginTab'), $('.saveTab'));
});

点击#someButton我想通过ajax提交整个表单。执行此操作的函数称为triggerAjaxSubmit。这个函数有一个简单的$ .ajax()函数,由jquery提供,并在successerror上执行某些操作。

所以我想知道如何延迟下一行modalSlide(),直到我从triggerAjaxSubmit()函数获得成功或错误。现在triggerAjaxSubmit()被触发,并且在modalSlide()函数触发后立即触发。但是,我希望modalSlide()函数仅在成功或错误返回时触发。

我能以某种方式这样做吗?我的意思是在ajax()调用中只有return "success"而不是激活modalSlide()函数?

提前谢谢你。 亲切的问候, 马特

编辑:

   function triggerAjaxSubmit(formId, reset, callback) {

    $(formId).ajaxSubmit({
        type: "POST",
        cache: false,
        resetForm: reset,
        dataType: "text json",
        success: function(jsonObject, status) {

                // some other stuff

                console.log('success');

        },
        error: function(requestObject, status) {

            console.log('error');
        }
    });
}

triggerAjaxSubmit(form, true, function() {
            console.log('this is not happning')
            modalSlide(modal, $('.loginTab, .signUpTab'), $('.saveWeaveTab'), $('#newWeaveForm_title'));
        });

4 个答案:

答案 0 :(得分:4)

您可以在[{1}}中返回$.ajax返回的延迟。类似的东西:

triggerAjaxSubmit

function triggerAjaxSubmit( .. ) {
  return $.ajax({ .. });
}

修改:使用表单插件,您应该可以执行此操作:

triggerAjaxSubmit( .. ).done(function() {
  modalSlide( .. );
});

function triggerAjaxSubmit( .. , callback ) {
  $( .. ).ajaxSubmit({
    .. ,

    success: function() {
      console.log("success");
      callback();
    })
  });
}

答案 1 :(得分:1)

您需要通过modalSlide来电中的回调来呼叫$.ajax()功能。

答案 2 :(得分:1)

AJAX调用是异步的(除非你在jQuery中使用有问题的async: false选项),所以如果你想在AJAX请求收到响应时执行一些代码,你需要把它放在{{ 1}}回调。

根据代码的其余部分,这可能与修改success函数一样简单,以便提供给triggerAjaxSubmit函数的回调包含相关代码。

或者您可能需要稍微修改它以将函数作为参数,然后将其作为$.ajax()函数的成功回调提供。

编辑:我错过了问题中的“或错误”,因此我只提到了$.ajax()回调。但同样的原则适用于success回调。

答案 3 :(得分:1)

modalSlide来电success参数中调用$.ajax()函数