包装在回调中的其他位置定义的异步函数

时间:2014-07-30 17:09:47

标签: javascript jquery ajax callback

所以我现在正在处理一些代码。有一个#saveButton,它通过jQuery附加了一个点击功能:

 $("#saveButton").click(function(){
     ...
     if(someCondition){
         $("#addRowsButton").click();
     }
 });

绑定到#addRowsButton的函数在绑定到#saveButton的函数的其他地方的Java Spring标记中定义。此函数发出Ajax发布请求。我需要使用回调来包装此post请求,以便我可以在完成后发出第二个post请求。我可以轻松地将$("#addRowsButton").click();函数的函数体复制并粘贴到我的#saveButton函数中,并在ajax post函数的回调中进行第二次调用。无论如何要包含一个带有回调的click()函数,该回调在异步调用完成之前不会执行回调吗?本质上似乎反对异步,但可能有办法吗?

3 个答案:

答案 0 :(得分:1)

不,这是不可能的。但您可以手动调用#addRowsButton的单击处理程序,该处理程序应返回$.ajax()调用返回的jqXHR值。然后你可以使用它作为延迟第二个ajax调用执行的承诺:

var addRowsButtonHandler = function() {
    return $.ajax({

        // ajax options

    });
}

$("#saveButton").click(function(){
    ...
    if(someCondition) {

        addRowsButtonHandler().then(function() {
            // second ajax call
        })
    }
});

答案 1 :(得分:1)

您需要做的是在第一篇文章中使用函数作为参数进行成功回调。所以你可以这样做:

   function callback2(){ stuff you need done on the second round trip to the server }

   $.ajax(ajax stuff).success(function(callback2){
   //do things you need done on the first trip
   callback2()

   }

答案 2 :(得分:0)

以下是如何处理它的:

        //Fire off the request 
        var request = $.ajax({
            url: "script.php",
            type: "post",
            data: {/*Whatever data you pass*/}
        });     

        //Callback handler that will be called on success
        request.done(function (response, textStatus, jqXHR){
           //Do stuff
        });

        //Callback handler that will be called on failure
        request.fail(function (jqXHR, textStatus, errorThrown){
            alert('Fail!');
        });