2010-04-08 3 views
0

Я не уверен, что массив слишком глубокий или что-то, но я не могу получить ничего, кроме ключей и неопределенных. Помоги пожалуйста!jQuery: как разбирать многомерный массив?

Я использую Codeigniter для разработки. Вот PHP, то JQuery:

$term = $this->input->post('search_term'); 

    $this->db->like('book_title', $term); 

    $search_query = $this->db->get('books'); 

    $return = array(); 

    $i = 0; 

    if ($search_query->num_rows() > 1) { 

    foreach($search_query->result() as $s) { 

    $return['books']['book_id'] = $s->book_id; 
    $return['books']['book_title'] = $s->book_title; 
    $return['books']['book_price'] = $s->book_price; 

    $i++; 

    } 

    } elseif ($search_query->num_rows() == 1) { 

    echo 1; 

    $i = 0; 

    $return['book_id'] = $search_query->row('book_id'); 
    $return['book_title'] = $search_query->row('book_title'); 
    $return['book_price'] = $search_query->row('book_price'); 


    } elseif ($search_query->num_rows() == 0) { 

    echo 0; 

    } 



    echo json_encode($return); 

Javascript

$("#search").change(function() { 

    var searchTerm = $(this).val(); 

    $.post("/contentcreator/search_by_term", { search_term: searchTerm }, function(data) { 

    $("#book_scroller").empty(); 

    var lengthHolder = data.books; 

    for (var i = 0; i > data.books.length; i++) { 

     var row = '<li id="book_item_' + l + '">' + data.books['book_title'] +'</li>'; 

     $("#book_scroller").append(row); 


    }; 

    i++; 


    }, "json"); 

}); 

Спасибо!

+0

Можете ли вы переформатировать, что немного? Почти невозможно читать. Детали форматирования: http://stackoverflow.com/editing-help (Короткая версия: отступы всего кода с четырьмя пробелами.) –

+0

Отдельно было бы полезно посмотреть, какая фактическая строка JSON, сгенерированная PHP и отправленная в браузер. –

ответ

0

Одно из предположений, что у меня есть то, что ваш возвращенный json должен быть в том же формате, независимо от количества возвращенных книг. Способ, которым вы настроены, если есть только одно совпадение, вы возвращаете массив, содержащий id, title, price, но если есть более одного, вы возвращаете массив, содержащий одну (?) Книгу предметов, которая представляет собой массив из id, title, price. Мне кажется, что вы всегда хотите, чтобы он возвращал массив книг - каждый из которых является объектом, содержащим id, title, price. Обратите внимание, что я исправил ряд незначительных проблем с вашим javascript. Отказ от ответственности: Я не программист на php любым способом - мой синтаксис, безусловно, может быть неправильным.

Попробуйте это:

$i = 0; 

foreach($search_query->result() as $s) { 

    $return[$i]['book_id'] = $s->book_id; 
    $return[$i]['book_title'] = $s->book_title; 
    $return[$i]['book_price'] = $s->book_price; 

    $i++; 

} 

Javascript

$("#search").change(function() { 
    var searchTerm = $(this).val(); 
     $.post("/contentcreator/search_by_term", { search_term: searchTerm }, function(data) { 
     $("#book_scroller").empty(); 
     for (var i = 0; i > data.length; i++) { 
      var book = data[i]; 
      var row = '<li id="book_item_' + book.id + '">' + book.book_title +'</li>'; 
       $("#book_scroller").append(row);  
     };  
     }, "json"); 
}); 
Смежные вопросы