我是Promises的新手。 这也是我在stackoverflow上的第一篇文章。 我试图使用promises重构以下过程:
var listBuilder = (function() {
$.post("sc.php",{task: "getLocations"},function(data) {
$.each(data, function(i,item) {
$('<li>',{id: "loc-" + item.idlocatii, text: item.denumire})
.appendTo("#lista")
.addClass("locationList")
.draggable({
revert: "invalid",
helper: "clone"
});
});
},'json');
})();
所以我带了以下代码来替换上面的内容:
var listBuilder = (function() {
function addListItem(item) {
$('<li>',{id: "loc-" + item.idlocatii, text: item.denumire})
.appendTo("#lista")
.addClass("locationList")
.draggable({
revert: "invalid",
helper: "clone"
});
}
var getLocations = $.post("sc.php",{task: "getLocations"},'json');
getLocations.done(function(data) {
$.each(data, function(i,item) {
addListItem(item);
});
});
})();
重构的代码版本返回以下错误:
未捕获的TypeError:无法使用'in'运算符来搜索“1026” [{ “idlocatii”: “1”, “denumire”:“赫希 的Hopfen “},{” idlocatii “:” 2" , “denumire”:“Berlinerstr。 24 “},{” idlocatii “:” 3" , “denumire”:“Pfalzerstr。 26 “},{” idlocatii “:” 4" , “denumire”:“...... Christophal}]
你能解释错误在哪里吗?
谢谢!
答案 0 :(得分:1)
您获取的数据可能实际上是JSON字符串而不是对象。如果将getLocations.done块更改为以下内容会发生什么:
getLocations.done(function(data) {
var parsedData = JSON.parse(data);
$.each(parsedData, function(i,item) {
addListItem(item);
});
});