CodeIgniter Ajax не возвращает данные MySQL - PullRequest
0 голосов
/ 29 октября 2011

По сути, у меня есть ряд функций, которые загружают набор записей в блоге для создания страницы.Внизу страницы у меня есть ссылка, которая запускает jQuery Ajax для контроллера Ajax, который использует одну и ту же строку функций для загрузки большего количества записей блога с другим смещением.

У меня два запроса изначально в одномфункций.Тот, который подсчитывает общее количество строк, и вызывается основная функция, которая возвращает данные для 10 или менее строк.Я получаю все данные, кроме основных данных в блоге.

Вот большая часть кода, я вырезал все остальное в функциях, которые не имеют отношения к делу:

Mainконтроллер вида

public function blog() {
    $this->load->helper('date');
    $this->load->model('blog_model');

    $result = $this->blog_model->process_uri(0);
    $this->load->view($result['view'],$result);
}

контроллер Ajax

public function blog_data() {
    $this->load->helper('date');
    $this->load->model('blog_model');

    //$offset = $this->input->post('offset');
    $data = $this->blog_model->process_uri(0);
    echo json_encode($data);
}

Модель

public function process_uri($offset) {
    $result;
    $uri = $this->uri;

    // There's more this function, but I cut it out.
    $result = array('type' => 'list');

    return $this->blog_model->get_blog_data($result,$offset);
}

Где, на мой взгляд, лежит проблема

private function get_blog_data($data,$offset) {
    $return = array('type' => $data['type']);
    $limit;
    $select;

    if (false) {
    }
    else {
        $return['view'] = 'blog_view';

        $this->db->select('id');
        $r = $this->db->get('blog');
        $return['total'] = $r->num_rows() - ($offset + 10);
        $return['current'] = $offset + 10; // This returns

        $limit = 10;
        $select = 'blog.id,title,type,date,message,images';
        $this->db->order_by('blog.id','desc');
        if (isset($data['date'])) $this->db->like('date',$data['date'],'after');
    }

    $this->db->select($select);
    $this->db->from('blog');
    $this->db->join('blog_img','blog_img.id = blog.id','left');
    $this->db->limit($limit,$offset);

    // This does not return any data in the Ajax call.
    $return['entries'] = $this->blog_model->process_data($this->db->get());

    return $return;
}

private function process_data($data) {
    foreach($data->result() as $i => $row) {
        //Formats the data
    }
}

Возвращаемые данныеЯ получаю в JavaScript это:

{"type":"list","view":"blog_view","total":5,"current":10,"entries":[]}

Как видите, даже если я передаю идентичные данные через контроллер Ajax, массив записей остается пустым.Я не слишком знаком с CodeIgniter , и особенно с его использованием Ajax, поэтому я был бы очень признателен, если бы кто-то мог помочь с этим, поскольку это действительно убивает меня.

Кроме того, я знаюпроблема не в коде JavaScript, потому что я попытался добавить некоторые статические данные в функцию process_data, чтобы посмотреть, будет ли он отображаться, и это так, поэтому я не добавил код JavaScript.

Ответы [ 2 ]

0 голосов
/ 29 октября 2011

После некоторых поисков я нашел функцию codeigniter last_query, которая возвращает последний запрос, чтобы я мог видеть, что идет не так.

$return['last'] = $this->db->last_query();

А вот запрос, который выполнялся через AJAX

SELECT `blog`.`id`, `title`, `type`, `date`, `message`, `images`\nFROM (`blog`)\nLEFT JOIN `blog_img` ON `blog_img`.`id` = `blog`.`id`\nWHERE  `date`  LIKE 'blog\\_data%'\nORDER BY `blog`.`id` desc\nLIMIT 10"

Мне удалось найти проблему

0 голосов
/ 29 октября 2011

Просто предположение, поскольку я не уверен, что вызывает ваш javascript, но если вы вызываете get_blog_data и ожидаете вывода, который может использовать jQuery, это не сработает.Если это так, вы должны вместо return, json_encode или распечатать / вывести данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...