Проблема с получением JQuery getJSON данных из контроллера (воспламенитель кода) - PullRequest
0 голосов
/ 24 марта 2011


У меня проблема с моим кодом JQuery, Ajax и PHP. У меня есть страница, содержащая все сообщения от пользователя. Затем на этой странице я хочу загрузить последний комментарий для этого поста, используя Ajax. Однако это ничего не показывает.

Вот код PHP, где я вызвал функцию JQuery:

<? foreach($post_query as $post_row){ ?>
   <li class="post_list">
   <?php echo $post_row['text'];?>
   <br/>
    Latest Comment: 
    <br/>
    <script type="text/javascript">
        var post_id = $('#post_id_<?php echo $post_row['id'];?>').val();
        document.write(post_id);//just to check that post_id value is not undefined

        $(function(){
            $.getJSON("<?php echo base_url();?>postC/latest_comment", {post_id: post_id}, 
               function(res){
                  $("#result").prepend(res.text);
               });
        });

    </script>

<? } ?>

И это мой PHP Code Igniter Controller, который обрабатывает запрос:

class postC extends CI_Controller {

    function __construct()
    {
        parent::__construct();
        $this->load->model('models_facade');
        $this->load->Database();
        $this->load->helper('url');
        $this->load->helper('form');    
        $this->load->library('tank_auth');
        $this->load->library('user_session_lib');
        error_reporting(E_ALL ^ (E_NOTICE | E_WARNING));
    }
        function latest_comment(){
        $post_id        = $this->checkValues($_GET['post_id']);
        $latestcomment  =  $this->models_facade->getLatestCommentForPost($post_id);
        return json_encode($latestcomment);
    }
}

Я протестировал вызов функции вручную и отображение последнего комментария без использования ajax, и это сработало. Таким образом, это означает, что нет ничего плохого в серверной функции в модели, которая извлекает результат из mysql.
Я также пытался сделать:

echo json_encode($latestcomment);  

при попытке вызвать функцию вручную, и я мог видеть, что данные были в формате JSON.
Это значит, что с вызовом ajax что-то не так, что он не получил данные от контроллера. Я использовал GET для .getJSON и POST для .post () и .ajax ().

Я перепробовал все версии вызова jQuery Ajax: .getJSON (), .post () и .ajax (), но ни одна из них не сработала. Я уверен, что соответствующие библиотеки Jquery были загружены правильно, так как все мои другие функции Ajax могли работать должным образом.

Кто-нибудь знает, где могут быть ошибки? Я отлаживал это целый день и ничего не получил.
Спасибо

Ответы [ 4 ]

1 голос
/ 24 марта 2011

Вот как я обрабатываю свои вызовы jQuery Codeigniter, и это работает для меня.

Попробуйте это для jQuery:

$(function(){
        $.post("<?php echo base_url();?>postC/latest_comment", {post_id: post_id}, 
           function(data){
              $("#result").prepend(data.html);
           },'json');
    });

PHP:

function latest_comment(){
    $post_id        = $this->checkValues($_GET['post_id']);
    $jsonData['html']  =  $this->models_facade->getLatestCommentForPost($post_id);
    echo json_encode($jsonData);
}

Это позволит вам добавить больше в возвращаемый объект JSON. Мне нравится использовать один трюк - добавить в массив значения «fail» и «msg». Поэтому, если пользователь должен получить уведомление, я могу сообщить ему, что произошел сбой, и, возможно, почему.

Надеюсь, это поможет

// Копье

0 голосов
/ 27 августа 2013

Мой друг, у меня была похожая ситуация. Вместо того, чтобы использовать код возврата, попытайтесь повторить результат. В основном вам нужен готовый файл данных json и скрипт jj, который его анализирует. В вашем случае результат просто плавающий и ждет, чтобы его отобразили в представлении. Надеюсь, это поможет.

0 голосов
/ 02 января 2013

Вот как я обрабатываю свои вызовы jQuery Codeigniter, и это работает для меня.

$(function(){
        $.post("<?php echo base_url();?>postC/latest_comment", {post_id: post_id}, 
           function(data){
              $("#result").prepend(data.html);
           },'json');
    });

PHP:

function latest_comment(){
    $post_id        = $this->checkValues(**$_GET['post_id']**);
    $jsonData['html']  =  $this->models_facade->getLatestCommentForPost($post_id);
    echo json_encode($jsonData);
}

Это позволит вам добавить больше в возвращаемый объект JSON. Мне нравится использовать один трюк - добавить в массив значения «fail» и «msg». Поэтому, если пользователь должен получить уведомление, я могу сообщить ему, что произошел сбой, и, возможно, почему.

Надеюсь, что поможет

В этом ответе
$_POST['post_id'] отлично работает для моего случая вместо $_GET['post_id']

0 голосов
/ 25 марта 2011

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

javascript:

$(function(){
    $.getJSON("<?php echo base_url();?>postC/latest_comment/" + post_id, function(res){
        $("#result").prepend(res.text);
    });
});

и в контроллере php:

function latest_comment($post_id)
{
    $post_id        = $this->checkValues($post_id);
    $latestcomment  =  $this->models_facade->getLatestCommentForPost($post_id);

    // Better practise to put json header
    header('Cache-Control: no-cache, must-revalidate');
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    header('Content-type: application/json');

    return json_encode($latestcomment);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...