考虑:
function ajaxCall(url, callback) {
$.ajax({
type: "GET",
url: url,
success: function (data) { // <-- fail point: where does the returned data go, now?
// do stuff with data
if ( callback ) {
var ret = callback();
if ( ret !== undefined ) {
return ret;
}
}
}
});
}
function fooBar() {
return ajaxCall('some/url', function () {
// do stuff
return some_value;
}
}
是的,所以基本上,我想保留请求的异步性,这样浏览器就不会挂起,但最后仍会返回一个值...这是一个简化的例子,即使我甚至可以简化它更多。
事实上,我看到的唯一障碍是$.ajax
和success:
匿名函数之间的转换。
哼。
答案 0 :(得分:3)
你不能像这样异步使用这些调用,在你的调用函数返回很久之后,回调运行以后。相反,您需要做的是调用需要数据的函数作为(或整个)回调的一部分,例如:
function ajaxCall(url, callback) {
$.ajax({
type: "GET",
url: url,
success: callback
});
}
function fooBar() {
ajaxCall('some/url', function (data) {
functionThatNeedsData(data);
});
}
这只是一个展示正在发生的事情的例子,在实践中它可能只是:
function fooBar() {
$.get('some/url', functionThatNeedsData);
}
这只是调用你的functionThatNeedsData
来获取请求中的数据作为第一个参数...所以只要服务器响应数据,你就会把它传递到它需要做的地方并做你的其他工作用这些数据。