Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 包装回调中别处定义的异步函数_Javascript_Jquery_Ajax_Callback - Fatal编程技术网

Javascript 包装回调中别处定义的异步函数

Javascript 包装回调中别处定义的异步函数,javascript,jquery,ajax,callback,Javascript,Jquery,Ajax,Callback,所以我现在正在处理一些代码。有一个#save按钮,它通过jQuery附加了一个单击功能: $("#saveButton").click(function(){ ... if(someCondition){ $("#addRowsButton").click(); } }); 绑定到#addRowsButton的函数在定义了#saveButton的函数的其他地方的Java Spring标记中定义。此函数发出Ajax post请求。我需要用回调来

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

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

绑定到
#addRowsButton
的函数在定义了
#saveButton
的函数的其他地方的Java Spring标记中定义。此函数发出Ajax post请求。我需要用回调来包装这个post请求,以便在它完成后可以发出第二个post请求。我可以轻松地复制和粘贴
$(“#addRowsButton”)的函数体
函数调用my
#saveButton
函数,并在ajax post函数的回调中进行第二次post调用。是否可以用回调来包装click()函数,该回调在异步调用完成之前不会执行回调?从本质上看,似乎不支持异步,但可能有一种方法?

以下是您可以处理的方法:

        //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!');
        });

不,这是不可能的。但是您可以手动调用#addRowsButton的click处理程序,该处理程序应该返回从
$.ajax()调用返回的jqXHR值。然后,您可以将其用作延迟第二次ajax调用执行的承诺:

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

        // ajax options

    });
}

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

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

您需要做的是让第一篇文章中的success回调函数使用一个函数作为参数。所以你可以这样做:

   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()

   }

我仍然需要将该函数包装在一个回调中,等待ajax post收到响应(而不仅仅是发送的响应),我知道如何做。我试着不必复制代码的post部分,这样,如果对addrowsfunction进行了更改,我就不必在两个地方管理它了。我只是在想一些类似的事情。好建议。我唯一的问题是,如果我不传递任何函数,我的代码如何避免调用callback2()参数在javascript中是可选的,所以如果不传递参数,应该不会有问题。如果你可以发布一个具体的例子,我也可以给你一个更详细的解释。