【发布时间】:2013-10-04 09:08:19
【问题描述】:
我正在尝试构建一个名为 myApp 的应用程序,该应用程序具有属性 regularNameErrors 和方法 populateJSON,该方法使用 AJAX 调用来获取 JSON 对象,然后将其添加到声明为该方法的参数之一的属性中。
获取数据的功能确实有效,因为位置 3 的警报提供了正确的键列表。但是 1 处的警报返回 undefined 并且 2 处的警报为空白。
当我再次用myApp.regularNameErrors = data 替换行destination = data 时,它可以工作,所以我认为我误解了如何将对象属性传递给对象方法。但是我想多次使用方法 populateJSON 并且需要知道传递属性的正确方法。
var myApp = {
init: function () {
myApp.populateJSON(myApp.regularNameErrors, 'data/spelling.json').done(function () {
alert(myApp.regularNameErrors['kingscross']); //1
});
},
regularNameErrors: {}, //Object of spelling mistake:proper key:value pairs
populateJSON: function (destination, source) {
var def = $.Deferred();
$.getJSON(source, function (data) {
destination = data;
alert(Object.keys(myApp.regularNameErrors)); //2
alert(Object.keys(data)); //3
def.resolve();
});
return def.promise();
},
};
【问题讨论】:
-
您将
regularNameErrors分配为一个空对象,然后从不添加任何属性,这就是为什么显示的代码为myApp.regularNameErrors['kingscross']提供undefined并在您列出警报中的键时为空白。当您说要多次调用populateJSON()时,您的意思是希望每次调用都向regularNameErrors添加额外的数据,还是希望每次调用都替换之前的值? -
另外,你不需要人为的延迟对象; jQuery 中的所有 AJAX/JSON-P 请求都是延迟的示例,所以你可以这样做
return $.getJSON(... -
我想使用 'populateJSON' 来填充此处未显示的几个不同属性。我将“regularNameErrors”声明为空,然后将其用作“populateJSON”的目标输入,以便 getJSON 调用的结果是“regularNameErrors”的新值
-
@utkanos 只是为了确认 AJAX 请求的延迟部分只会在 ajax 调用和 ajax 调用后运行的函数完成时才响应 done
标签: javascript jquery ajax object