Я работал над проектом CodeIgniter и у меня возникла проблема с использованием ajax для возврата данных с моего контроллера.
контроллер:
function outputAjax() { $this->load->model('my_model'); $data['results'] = $this->site_model->getInfo(); $this->output->set_output(json_encode($data)); }
Модель:
function getInfo() { $this->db->order_by('PubDate','DESC'); $query = $this->db->get('Articles', 50); return $query->result(); }
Функция Ajax в представлении:
<div id="article-area"> <p>Hey this is where the ajax call should output!</p> </div> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <script type="text/javascript" language="Javascript"> jQuery(document).ready(function(){ $.ajax({ url: 'http://localhost/project/index.php/my_controller/outputAjax', dataType:'json', success: function(data) { $.each(data, function(index,item){ $("#article-area").append('<div><b>' + item.id + '</b></div><hr />'); }); } }); });
Я могу выводить данные с помощью PHP foreach, но теперь я пытаюсь преобразовать это в использование ajax. Если я прав, то выводимые данные представляют собой массив объектов . Каждый «объект» содержит 6 или около того полей данных, таких как: id, title, url, PubDate, Source.
Я довольно новичок в использовании ajax для чего-либо, но при попытке отладить эту проблему, используя проверку Chrome и проверку «Network», я вижу вызов ajax и на вкладке ответа: все данные, которые мне нужны, показаны здесь таким образом :
{"results":[{"id":"1","Source":"My Source","Title":"My Title". . . .
Поскольку данные отображаются в ответе, но ничто не отображается на странице, или если я изменяю вызов ajax, я могу заставить его выводить НЕ УКАЗАН.
Конечный результат, который я хочу достичь, составляет около 10 или около того div на странице с данными из вызова ajax. Что вызывает и мой вопрос …
Моя модель возвращает 50 строк данных из db. В настоящее время я передаю все это функции ajax в формате json. Сначала я буду использовать только 10 строк этих данных, а затем использовать оставшуюся часть строк за определенное количество времени на этой странице. Лучше ли продолжать сначала выводить все 50 строк на вызов ajax, а затем использовать их по мере необходимости или ограничивать данные только тем, что будет использоваться первоначально из модели?
Я пропустил несколько учебных пособий ajax с CI, но все они используют POST, и мне еще предстоит найти тот, который работает на document.ready и без взаимодействия с пользователем. Я также заметил, что для вывода данных должно быть несколько различных способов. Я видел использование .append () .after () и .value (), используемое таким образом, ни один из них не работал для моего конкретного случая, хотя …
Спасибо за помощь!
Если ваши данные были просто массивом, ваш код работал бы. Однако ваш массив данных содержится в results
который является свойством объекта.
Измените each
на:
$.each(data.results, function(index,item){...
Или просто отправьте массив, не помещая его в массив results
php
$data = $this->site_model->getInfo();