我有3-5个AJAX请求之间的以下功能。 我想要做的是将请求的响应保存在单个对象中。
但是,它们最终都会覆盖添加到对象的最后一个键。 所以我最终得到了一个null属性的对象,除了最后一个属性,它有无效数据(可能是最后完成的请求的数据)。
是否有解决方案,或者我做错了什么?
getKeyData: function () {
for (var key in ABC.PrintReport.keyList) {
k = ABC.PrintReport.keyList[key].Report_Key;
Ext.Ajax.request({
url: ABC.Core.servicePath + '/task/' + ABC.PrintReport.processInstanceID + '/report/' + ABC.PrintReport.keyList[key].Report_Key + '?portalID=' + ABC.Core.portalID,
success: function (response) {
ABC.PrintReport.reportData[k] = Ext.JSON.decode(response.responseText)[0];
}
});
}
},
答案 0 :(得分:1)
这个问题与闭包有关。变量k
不它在您的Ajax请求完成时曾经是k
。解决方案是注入" k
的当前值到Ajax请求的范围。
试试这个:
getKeyData: function () {
for (var key in ABC.PrintReport.keyList) {
k = ABC.PrintReport.keyList[key].Report_Key;
(function(index) {
Ext.Ajax.request({
url: ABC.Core.servicePath + '/task/' + ABC.PrintReport.processInstanceID + '/report/' + ABC.PrintReport.keyList[key].Report_Key + '?portalID=' + ABC.Core.portalID,
success: function (response) {
ABC.PrintReport.reportData[index] = Ext.JSON.decode(response.responseText)[0];
}
});
})(k);
}
},