$.get 后回调?
Callback after $.get?
我有一个 javascript 函数 foo。我希望在 foo 完成时调用 bar。我试过它作为回调。这没用。 Bar 在 foo 仍在执行 $.get 时被调用(这会在服务器上启动一个很长的 python 例程)。
function foo(callback){
$.get(
url="/myurl",
data={key:($(this).attr('data-button'))},
function(returndata) {
var array = eval(returndata);
drawTable(array);
});
callback();
}
foo(bar);
然而这有效。我很困惑为什么...
function foo(callback){
$.get(
url="/myurl",
data={key:($(this).attr('data-button'))},
function(returndata) {
var array = eval(returndata);
drawTable(array);
callback();
});
}
foo(bar);
它在第二种情况下工作,因为一旦响应到来就会调用 'bar()'。现在回到回调,编写回调的简单概念如下:
function func1(callback) {
alert('func1');
callback();
}
function func2() {
alert('func2');
}
func1(func2);
所以在你的情况下,理想情况下这应该有效:
function foo(callback) {
$.get(
url = "/myurl",
data = {
key: ($(this).attr('data-button'))
},
function(returndata) {
var array = eval(returndata);
drawTable(array);
callback.call();
});
}
function bar() {
//todo
}
foo(bar);
这是因为$.get是异步的。
来自文档 ...
This is a shorthand Ajax function, which is equivalent to:
$.ajax({
url: url,
data: data,
success: success,
dataType: dataType
});
您可以将其视为 运行 在单独的线程中。所以 bar() 不会充当回调。但在你的第二个例子中 "function(returndata)" 是 $.get 的回调函数,因此在里面给 bar() 就可以完成工作,因为现在 bar() 只会在 $.get 完成后被调用。
我有一个 javascript 函数 foo。我希望在 foo 完成时调用 bar。我试过它作为回调。这没用。 Bar 在 foo 仍在执行 $.get 时被调用(这会在服务器上启动一个很长的 python 例程)。
function foo(callback){
$.get(
url="/myurl",
data={key:($(this).attr('data-button'))},
function(returndata) {
var array = eval(returndata);
drawTable(array);
});
callback();
}
foo(bar);
然而这有效。我很困惑为什么...
function foo(callback){
$.get(
url="/myurl",
data={key:($(this).attr('data-button'))},
function(returndata) {
var array = eval(returndata);
drawTable(array);
callback();
});
}
foo(bar);
它在第二种情况下工作,因为一旦响应到来就会调用 'bar()'。现在回到回调,编写回调的简单概念如下:
function func1(callback) {
alert('func1');
callback();
}
function func2() {
alert('func2');
}
func1(func2);
所以在你的情况下,理想情况下这应该有效:
function foo(callback) {
$.get(
url = "/myurl",
data = {
key: ($(this).attr('data-button'))
},
function(returndata) {
var array = eval(returndata);
drawTable(array);
callback.call();
});
}
function bar() {
//todo
}
foo(bar);
这是因为$.get是异步的。 来自文档 ...
This is a shorthand Ajax function, which is equivalent to:
$.ajax({
url: url,
data: data,
success: success,
dataType: dataType
});
您可以将其视为 运行 在单独的线程中。所以 bar() 不会充当回调。但在你的第二个例子中 "function(returndata)" 是 $.get 的回调函数,因此在里面给 bar() 就可以完成工作,因为现在 bar() 只会在 $.get 完成后被调用。