我有以下代码。我正在做的是首先我向第一个网址发出ajax请求。我得到了回复,我需要来自该回复的一些数据。因此,我将该数据放入user
对象中。该回复还包括另一个网址。然后我再向该新网址发出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;
});
},
答案 0 :(得分:2)
您可以设置context
对$.ajax()
对象的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;
});
}
答案 1 :(得分:1)
在此功能中
function(user) {
user['name'] = user.name;
user['joined'] = user.create_at;
return $.ajax({
url: user.url,
method: 'GET',
type: 'JSON'
});
}
您正在函数的本地scope中创建user
变量。因此,当您执行user['name'] = user.name;
时,在作业的左侧部分,您不是指在外部,最高范围内定义的var user = {}
,而是指本地user
。
尝试将提取的user
数据命名为其他内容,例如userData
答案 2 :(得分:1)
把你的第二个。然后放在第一个。然后(链接到$ .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
};
});
});
},
根本不需要任何其他变量