使用jquery.each对promise.done返回的数据进行错误

时间:2014-03-06 16:52:03

标签: javascript jquery each

我是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}]

你能解释错误在哪里吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您获取的数据可能实际上是JSON字符串而不是对象。如果将getLocations.done块更改为以下内容会发生什么:

getLocations.done(function(data) {
    var parsedData = JSON.parse(data);
    $.each(parsedData, function(i,item) {
        addListItem(item);
    });
});