我对以下数组进行了硬编码,我可以使用它将选择插入到自动完成下拉菜单中。它似乎是一个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;
}
如何获得与硬编码数组相同类型/格式的返回结果?请具体说明代码。我不遵循一般说明。
答案 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;
}