[英]Chained ajax request with jquery promise
我有以下代码。 我正在做的是,首先我向第一个URL发出ajax请求。 我得到一个响应,我需要该响应中的一些数据。 因此,我将数据放入user
对象。 该响应还包括另一个URL。 然后,我向该新URL发出另一个Ajax请求。 我从url得到响应,然后将数据添加到user
对象。 在最后一个then()
函数中,我返回user
对象。 但是,当我调用get().done(function(data) { console.log(data) })
,我仅获得user.data
数组。 它在第一个ajax请求中不包括用户的详细信息。 如何合并来自这两个请求的数据并作为承诺返回(可能延迟)?
var get = function() {
var user = {};
return $.ajax({
url: 'URL',
method: 'GET',
type: 'JSON'
}).then(function(user) {
user['name'] = user.name;
user['joined'] = user.create_at;
return $.ajax({
url: user.url,
method: 'GET',
type: 'JSON'
});
}).then(function(data) {
user['data'] = data;
return user;
});
},
您可以将$.ajax()
调用的context
选项设置为user
对象
var get = function() {
var user = {};
return $.ajax({
url: 'URL',
method: 'GET',
type: 'JSON',
context: user
}).then(function(user) {
this['name'] = user.name;
this['joined'] = user.create_at;
return $.ajax({
url: user.url,
method: 'GET',
type: 'JSON',
context: this
});
}).then(function(data) {
this['data'] = data;
return this;
});
}
在此功能
function(user) {
user['name'] = user.name;
user['joined'] = user.create_at;
return $.ajax({
url: user.url,
method: 'GET',
type: 'JSON'
});
}
您正在函数的本地范围内创建user
变量。 所以当你做user['name'] = user.name;
,在分配的左侧,您不是在外部定义最高范围时引用的var user = {}
,而是本地user
。
尝试将获取的user
数据命名为其他名称,例如userData
像这样将第二个.then放在第一个.then内(链接到$ .ajax调用)
var get = function() {
return $.ajax({
url: 'URL',
method: 'GET',
type: 'JSON'
}).then(function(user) {
return $.ajax({
url: user.url,
method: 'GET',
type: 'JSON'
}).then(function(data) {
return {
name: user.name,
joined: user.create_at,
data: data
};
});
});
},
完全不需要任何其他变量
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.