从jQuery.map()函数中获取正确的类型和格式

时间:2012-12-12 20:05:19

标签: javascript arrays json jquery types

我对以下数组进行了硬编码,我可以使用它将选择插入到自动完成下拉菜单中。它似乎是一个JSON对象的数组,虽然我是一个JS新手,可能是错的。它有效。

var boroughData = [
    {"label":"New York, Bronx, Bronx County, New York, United States","value":"Bronx, Bronx County, New York, United States"},
    {"label":"New York, Staten Island, Richmond County, New York, United States","value":"Staten Island, Richmond County, New York, United States"}
];

我想从数据库提供类似的数据,并通过.map()函数进行组装。我有一些工作,但输出是不同的格式/类型。它似乎是一个带有一个长字符串的数组,但同样,我可能是错的。下面是一个例子(有不同的城市)。注意初始和结束“不在我上面的硬编码数组中。

["{"label":"Dallas, Cockr... Texas, United States"}", "{"label":"Dallas, Downt... Texas, United States"}", "{"label":"Dallas, East ... Texas, United States"}"]

数据库中的数据目前看起来如下,但如果有帮助,可以更改。

{"label":"Dallas, Cockrell Hill, Dallas County, Texas, United States", "value":"Dallas, Cockrell Hill, Dallas County, Texas, United States"}

我尝试使用字符串操作来替换/删除初始和结束“但我无法使其工作。也许我需要在.map()函数中使用不同的东西来创建对象。我的.map()在ajax成功选项如下

success: function (data){
    boroughData = $.map( data, function (item){
        return item.boroughString;
        //returning {"label":"Dallas, Cockrell Hill, Dallas County, Texas, United States", "value":"Dallas, Cockrell Hill, Dallas County, Texas, United States"}
    });
    alert(jQuery.isArray(boroughData)  + "|bD1"); //true, is array
    return boroughData;
}

如何获得与硬编码数组相同类型/格式的返回结果?请具体说明代码。我不遵循一般说明。

2 个答案:

答案 0 :(得分:0)

由于您在item.boroughString中获得的数据是字符串,因此您可以使用JSON.parse解析它(或对不支持此功能的浏览器使用json2.js - 另请参阅这个问题:Parse JSON in JavaScript?)它应该在完整的JSON对象中转换你的字符串。

$.ajax({
    success: function (data){
        boroughData = $.map( data, function (item){
            return JSON.parse(item.boroughString);
            // should return JSON object {"label":"Dallas, Cockrell Hill, Dallas County, Texas, United States", "value":"Dallas, Cockrell Hill, Dallas County, Texas, United States"}
        });

        alert(jQuery.isArray(boroughData)  + "|bD1"); //true, it is again an array

        //return boroughData; Your success should not return a variable to be used after!!! Ajax is asynchronous
        //
        // Rather use a callback function
        functionToBeExecutedAfterTheSuccess();
    }
});

function functionToBeExecutedAfterTheSuccess() {
    alert(boroughData + "|bD3"); //[object Object],[object Object],[object Object] with OK contents
}

答案 1 :(得分:0)

在我看来,您可以做的最好的事情是确保服务器返回有效的JSON对象。通常不建议在Javascript中修复可以修复服务器端的东西。

那就是说,将字符串转换为等于硬编码数组的数组的方法,可以使用:

success: function (data){
    // split the data with separator ", 
    var parts = data.split("\",");
    var boroughData = [];
    // looping through all parts
    for (var i=0, ii=parts.length; i < ii; i++) {
      // getting the value of the part between { and }
      var part = parts[i].substring(parts[i].indexOf("{"),parts[i].indexOf("}")+1);
      // add part as json to the array
      boroughData.push($.parseJSON(part));
    }
    return boroughData;
}