我需要进行一些ajax调用,并且只有当它们全部完成时才会继续。我已经看过jQuery的$ when()。then()但我似乎无法让它工作。
$.when(
getFriends()
).done(function( friends ){
console.log( friends );
});
getFriends然后调用另一个方法来生成ajax请求并返回数据,这就是我认为问题所在。
getFriends: function()
{
apiRequest( 'GET', 'friends', null,
function( data ){
return data;
},
function( error )
{
console.log( error );
}
);
}
apiRequest方法只获取所有数据,添加一些必要字段以便关闭服务器然后返回数据。这部分工作正常。这只是整个制作过getFriends让其他人知道它什么时候完成。
apiRequest: function( method, endpoint, data, success, error )
{
var endpoint = config.api_base_url + endpoint;
var ajax_options = {
type: method,
data: data,
success: success,
error: error
};
if( auth_token = getAuthToken() )
{
ajax_options.beforeSend = function( request )
{
request.setRequestHeader( 'X-Auth-Token', auth_token );
};
}
$.ajax( endpoint, ajax_options );
}
非常感谢任何帮助或建议。感谢
答案 0 :(得分:2)
您需要return
承诺$.ajax()
,cannot return
from the success handler。然后从getFriends
返回一个承诺:
getFriends: function() {
return apiRequest('GET', 'friends', null).fail(function(error) {
// ^^^^^^
console.log(error);
}); // modified by the fail handler
},
apiRequest: function(method, endpoint, data) {
var ajax_options = {
url: config.api_base_url + endpoint,
type: method,
data: data
};
var auth_token = getAuthToken();
// ^^^ missing var
if (auth_token)
ajax_options.beforeSend = function(request) {
request.setRequestHeader('X-Auth-Token', auth_token);
};
return $.ajax(ajax_options);
// ^^^^^^
}
答案 1 :(得分:1)
我不知道'承诺'你会对此感兴趣吗?MDN - Promises