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中是可选的,所以如果不传递参数,应该不会有问题。如果你可以发布一个具体的例子,我也可以给你一个更详细的解释。