У меня длинный sql-запрос с большим количеством производных столбцов, и я пытаюсь его отобразить на угловой странице. Я достиг точки, в которой я получаю ответ json из db, но возвращающ каждую строку как один большой объект вместо массива. Я использую perl для запроса db, и я пробовал кучу способов разобрать его, и я еще не получил его.
Подпрограмма:
require fileWithAllImports.pl #has CGI, JSON, etc
%response = {};
$response{error}{code} = "0";
$response{error}{message} = "OK";
$sql = "select c.title as Content....";
$sql = &database_escape_sql($sql); #I think its self-explanatory what this does
%hash = &database_select_as_hash_with_auto_key(
$sql,"content ... "); #more columns
foreach $i ( keys %hash ) {
$id = $i;
$response{$i}{content} = $hash{$i}{content};
...
} #again all of the columns
print_json_response(%response);
Угловой вызов:
$http.get("/folder/ofSubroutine.cgi")
.then(function(minutes_results) {
console.log(minutes_results);
и ответ json:
{"6":{"derivedcolumn":"123","anotherderived":"987",..},"11":{"derived column":"123"}...}
Я верю, что ng-repeat
работает только с массивом, так как я могу разобрать ответ с сервера на массив?
На задней панели вы можете поместить данные в отдельный массив вместо добавления каждой строки в хэш:
foreach $i ( keys %hash ) {
push @{$response{data}}, { id => $i,
content => $hash{$i}{content},
... ,
};
}
print_json_response( %response );
Или на лицевой стороне преобразуйте свой ассоциативный массив в обычный массив:
$http.get("/folder/ofSubroutine.cgi")
.then(function(minutes_results) {
console.log(minutes_results);
var minutes_results_as_array = [];
for (var key in minutes_results) {
if (key != "error") {
minutes_results[key].id = key;
minutes_results_as_array.push(minutes_results[key]);
}
}
// display minutes_results_as_array as you see fit
} );