将响应数据从AJAX请求传递到JS对象延迟

时间:2014-03-18 13:41:16

标签: javascript ajax

我有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];
            }
        });
    }
},

1 个答案:

答案 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);
    }
},