Javascript异步函数
我在理解如何才能/应该解决这一问题时遇到了问题 我有两个功能。在第一个函数(我称之为Javascript异步函数,javascript,Javascript,我在理解如何才能/应该解决这一问题时遇到了问题 我有两个功能。在第一个函数(我称之为loadData())中,我向服务器发出异步请求以加载一些数据 在第二个函数(saveData())中,我还向服务器发送了一个asyn请求,以写入一些数据。在这个请求的回调中,我调用loadData()刷新数据 现在的问题是:在saveData()函数中,我想等待loadData()完成,然后再显示对话框(如alert('Data saved')) 我想这是一个常见的问题,但我找不到解决方案(如果有) 一个解决方
loadData()
)中,我向服务器发出异步请求以加载一些数据
在第二个函数(saveData()
)中,我还向服务器发送了一个asyn请求,以写入一些数据。在这个请求的回调中,我调用loadData()
刷新数据
现在的问题是:在saveData()
函数中,我想等待loadData()
完成,然后再显示对话框(如alert('Data saved')
)
我想这是一个常见的问题,但我找不到解决方案(如果有)
一个解决方案是使请求同步,但我使用的框架不提供同步,我希望有更好的解决方案
谢谢大家 在这些情况下,技巧是嵌套“成功”回调,如下所示:
$.ajax({
url: "/loadData",
success: function () {
// Data Loaded... Save the data
$.ajax({
url: "/saveData",
success: function () {
// Data Saved... Display alert
alert('Data saved');
}
});
}
});
function loadData() {
.ajax({
url: "/loadData",
success: function () {
// Data Loaded... Process the data
}
});
}
function saveData() {
loadData(function () {
// Data Loaded (and processed by loadData())... Save the data
.ajax({
url: "/saveData",
success: function () {
// Data Saved... Display alert
alert('Data saved');
}
});
});
}
如果您的loadData()
函数如下所示:
$.ajax({
url: "/loadData",
success: function () {
// Data Loaded... Save the data
$.ajax({
url: "/saveData",
success: function () {
// Data Saved... Display alert
alert('Data saved');
}
});
}
});
function loadData() {
.ajax({
url: "/loadData",
success: function () {
// Data Loaded... Process the data
}
});
}
function saveData() {
loadData(function () {
// Data Loaded (and processed by loadData())... Save the data
.ajax({
url: "/saveData",
success: function () {
// Data Saved... Display alert
alert('Data saved');
}
});
});
}
。。。然后,您可能希望给它一个回调参数,该参数在成功回调返回之前被调用:
function loadData(myCallback) {
.ajax({
url: "/loadData",
success: function () {
// Data Loaded... Process the data
// ... Your Data Processing Logic ...
// Invoke the callback (if one was passed):
if (typeof myCallback === 'function') {
myCallback();
}
}
});
}
然后,您就可以像这样实现saveData()
函数:
$.ajax({
url: "/loadData",
success: function () {
// Data Loaded... Save the data
$.ajax({
url: "/saveData",
success: function () {
// Data Saved... Display alert
alert('Data saved');
}
});
}
});
function loadData() {
.ajax({
url: "/loadData",
success: function () {
// Data Loaded... Process the data
}
});
}
function saveData() {
loadData(function () {
// Data Loaded (and processed by loadData())... Save the data
.ajax({
url: "/saveData",
success: function () {
// Data Saved... Display alert
alert('Data saved');
}
});
});
}
您仍然可以调用
loadData()
函数,而不必在脚本的其他部分使用任何参数。嵌套函数是一种解决方案,但在代码质量方面是一个坏主意。您可能需要查看jquery延迟对象来解决它