0

我对以下数组进行了硬编码,我可以使用它将选择插入到自动完成下拉列表中。它似乎是一个 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() 函数中使用不同的东西来创建对象。我在 ajax 成功选项中的 .map() 是跟随

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;
}

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

4

2 回答 2

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
}
于 2012-12-12T22:58:48.973 回答
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;
} 
于 2012-12-13T07:11:39.667 回答