Перебор двухмерного массива
Здравствуйте!
Есть задача: при помощи ajax получать записи из бд Mysql. Сайт работает на codeigniter. $('#TestPrivet1').click(function(){ var param = $('#pole1').val(); $.ajax({ type: 'POST', url: 'http://masterstvo-zhizni.loc/index.php/seminars/showAjax', data: {'param':param}, cache: false, dataType: 'json', success: function(data) { $('#result1').html('<table class="raspisanie_sem"><tr class="one"><td>Дата проведения</td><td>Город</td><td>Организатор</td><td>Тема</td></table>'); for ( var key1 in data['dataAjax'] ) { for ( var key2 in data['dataAjax'][key1] ) { $('#result1').append('<tr class="tbody"><td>' + data['dataAjax'][key1]['date']+ '</td><td>'+ data['dataAjax'][key1]['gorod']+'</td><td class="cursiv">'+ data['dataAjax'][key1]['fio']+ data['dataAjax'][key1]['telefon']+data['dataAjax'][key1]['email']+'</td><td class="bold_td">'+data['dataAjax'][key1]['zagolovok']+'</td></tr>'); } } } });//конец ajax });//конец клик });//конец ready Контроллер: public function showAjax(){ $param = $this->input->post('param'); $data = array(); $data['dataAjax'] = $this->raspisanie_model->get_one($param); // Возвращаем ответ echo json_encode($data); } Запрос к базе: public function get_one($seminar_id) { $this->db->select(' raspisanie.date , organizator.gorod , organizator.fio , organizator.email , organizator.telefon , seminars.zagolovok'); $this->db->from('raspisanie'); $this->db->join('seminars', 'raspisanie.seminar_id = seminars.seminar_id'); $this->db->join('organizator', 'raspisanie.organizator_id = organizator.organizator_id'); $this->db->where('raspisanie.seminar_id',$seminar_id); $query = $this->db->get(); return $query->result_array(); } Проблема в следующем: данные вставляются, но почему то приходит три строки. А при переборе массива каждая строка выводится на сайте по 6 раз.т.е. вместо 3-х нужных, получаю 18 строк в таблице на сайте. firebug: dataAjax [Object { date="7-8-9 декабря 2012г.", gorod="Рязань", fio="Елена ", ещё...}, Object { date="14-15-16 декабря", gorod="Воронеж", fio="Фарида и Александр" , ещё...}, Object { date="2-3 февраля", gorod="Одесса", fio="Татьяна " , ещё...}] 0 Object { date="7-8-9 декабря 2012г.", gorod="Рязань", fio="Елена " , ещё...} 1 Object { date="14-15-16 декабря", gorod="Воронеж", fio="Фарида и Александр", ещё...} 2 Object { date="2-3 февраля", gorod="Одесса", fio="Татьяна " , ещё...} |
у тебя явно косяк внутри двух циклов где формируется HTML полученных данных, думаю ряды <tr> нужно формировать в первом цикле ( вне второго короче) а уже столбцы <td> добавлять внутри второго цикла,
в общем у тебя логическая ошибка тут что-то вроде того success: function(data) { $('#result1').html('<table class="raspisanie_sem"><tr class="one"><td>Дата проведения</td><td>Город</td><td>Организатор</td><td>Тема</td></table>'); var html='' for ( var key1 in data['dataAjax'] ) { html+='<tr class="tbody">' for ( var key2 in data['dataAjax'][key1] ) { html+='<td>'+data['dataAjax'][key1][key2]+'</td>' } html+='</tr>' } $('#result1').append(html) } // отпишись как помозгуешь |
Спасибо тебе огромное! щас выводит правильно. Только три строки. Но, в разных ячейках
|
Есть ещё вопрос:
Щас он выводит каждый элемент в отдельную ячейку, т.е получается 6-ть ячеек, а в шапке 4-ре А мне нужно: первый элемент: data['dataAjax'][key1]['date'] в отдельной ячейке второй элемент: data['dataAjax'][key1]['gorod'] в отдельной ячейке третий и четвертый и пятый вывести в одной ячейке: data['dataAjax'][key1]['fio']; data['dataAjax'][key1]['telefon']; data['dataAjax'][key1]['email'] шестой data['dataAjax'][key1]['zagolovok'] в отдельной ячейке function(data) { $('#result1').html('<table class="raspisanie_sem"><tr class="one"><td>Дата проведения</td><td>Город</td><td>Организатор</td><td>Тема</td></table>'); var html='' for ( var key1 in data['dataAjax'] ) { html+='<tr class="tbody">' for ( var key2 in data['dataAjax'][key1] ) { html+='<td>'+data['dataAjax'][key1]['date']+'</td>'+'<td>'+data['dataAjax'][key1]['gorod']+'</td>'+'<td>'+data['dataAjax'][key1]['fio']+data['dataAjax'][key1]['telefon']+data['dataAjax'][key1]['email']+'</td>'+'<td>'+data['dataAjax'][key1]['zagolovok']+'</td>'; } html+='</tr>' } $('#result1').append(html) } Щас выводит три строки, но теперь повторяет столбцы. Т.е первый проход цикла 4-ре столбца , потом опять 4-ре столбца и т.д. |
success: function(data) { $('#result1').html('<table class="raspisanie_sem"><tr class="one"><td>Дата проведения</td><td>Город</td><td>Организатор</td><td>Тема</td></table>'); var html='',count for ( var key1 in data['dataAjax'] ) { count=0 html+='<tr class="tbody">' for (var key2 in data['dataAjax'][key1] ) {count++ if (count<4||count==6){html+='<td>'} html+=data['dataAjax'][key1][key2] if (count<3||count>4){html+='</td>'} } html+='</tr>' } $('#result1').append(html) } // что-то вроде того проверь там |
Изящно, Зачёт! Сработало. Вывел три строки в каждой по 4-ре ячейки
|
Здравствуйте! Понимаю, что теме уже >4 лет, но столкнулась с абсолютно идентичной проблемой, так что даже зарегистрировалась на форуме и вышла из режима readonly :D
success: function (data) { list = JSON.parse(data); var html = ""; for (var key1 in list['list']) { html+='<a class = "link" onclick="event.preventDefault()">'; for (var key2 in list['list'][key1]) { //i++; // console.log(i); html +='<li class = "big" onclick="findList(' + (+key1 + 1) + ')">' + list['list'][key1]["ima"] + " \(" + list['list'][key1]["count(marker.district)"] + "\)</li>"; //console.log(list['list'][key1]["ima"]); } html+='</a>'; }; html+='<a class = "link" onclick="event.preventDefault()"><li class = "big" onclick="findList('+list.allLIST['count(*)']+")>Все районы" + " \(" + list.allLIST['count(*)'] + "\)</li></a>"; console.log(html); $("ul.list").html(html); } Прочитав ответ от bushstas, выполнила его совет. В итоге все равно выводит по три строки в один <li>. А list.allLIST['count(*)'] вообще выдает undefined. Помогите пожалуйста, кто сможет. Уже три дня бьюсь головой о клаву... Заранее спасибо! |
Цитата:
|
Цитата:
Запросы к базе и тд. не предоставила, потому как объект (массив) практически идентичен с объектом автора темы. |
Navka1, начнем с того, что в тег <a> не стоит "вставлять" теги <li>...
Для анализа циклов бывает достаточно просто выводить то, с чем имеешь дело в самом цикле. Обычно это многое проясняет... ;) |
Часовой пояс GMT +3, время: 10:13. |