обновление статуса jquery codeigniter - предыдущие обновления не отображаются - PullRequest
2 голосов
/ 21 декабря 2011

Я работаю над обновлением статуса в Facebook, используя jquery в Codeigniter. Пока у меня есть база данных, модели, контроллеры, представления и jquery.

Мои обновления статуса публикуются в базе данных. Проблема в том, что я не вижу предыдущих обновлений статуса в моем представлении (они должны быть в #content div) , вместо этого, когда я нажимаю submit, я получаю пустой экран (у меня исправлены ошибки php так что дело не в этом). Я подозреваю, что проблема в jquery или представлении списка сообщений.

БАЗА ДАННЫХ

CREATE TABLE IF NOT EXISTS `messages` (
  `id` tinyint(4) NOT NULL AUTO_INCREMENT,
  `message` VARCHAR(200) NOT NULL,
  PRIMARY KEY  (`id`)
)

CONTROLLER

<?php

class Message extends CI_Controller
{

    function index () {
        $this->load->view('default');
    }

function add()
{
    if ($this->input->post('submit')) {
            $id = $this->input->post('id');
            $message = $this->input->post('message');

            // Add the post
            $this->load->model('message_model');
            $this->message_model->addPost($id, $message);
        }
}

 function view($type = NULL)
{
    $data['messages'] = $this->db->get('message');

    if ($type == "ajax")
        $this->load->view('messages_list', $data);
    else // load the default view
        $this->load->view('default', $data);
}

}

MODEL

<?php 

class Message_model extends CI_Model {

function addPost($id, $message) {
        $data = array(
            'id' => $id,
            'message' => $message
        );

        $this->db->insert('messages', $data);
}

function get($limit=5, $offset=0)
{
    $this->db->orderby('id', 'DESC');
    $this->db->limit($limit, $offset);

    return $this->db->get('messages')->result();
}
}

HTML / JQuery

<!DOCTYPE html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" type="text/javascript"></script>
<script type="text/javascript"> 
$(document).ready(function() {
    $('#submit').click(function() {

        var msg = $('#message').val();

        $.post("<?= site_url('message') ?>", {message: msg}, function() {
            $('#content').load("<?= site_url('message/view/ajax') ?>");
            $('#message').val('');
        });
    });
});
</script>
</head>
<body>
<div id="form">    
    <?php echo form_open('message/add'); ?>
    <input type="text" id="message" name="message" />
    <?php echo form_submit('submit', 'Update', "class='button'"); ?>
    <?php echo form_close(); ?>
</div>
 <br />
 <br />
<div id="content">
<?php $this->load->view('messages_list') ?>   
</div>

</body>
</html>

СПИСОК СООБЩЕНИЙ (это то, что должно загружаться в #content div; список предыдущих сообщений - ограничено 5 для модели)

<ol>
<?php 
if (!empty($message) and (is_array($message)))
 foreach ($message as $message):
?>
    <li><?= $message->message ?></li>
<?php endforeach ?>
</ol>

Ответы [ 2 ]

0 голосов
/ 21 декабря 2011
  • Вы перенаправлены на совершенно другую страницу (пустую), или это просто js, который закрывает текущую страницу?
  • И это пустая только #content или вся страница?
  • вызывается функция обратного вызова $.post()?(Попробуйте с alert())
  • Вы уверены, что message/view/ajax возвращает ожидаемый HTML?-> попробуйте посмотреть, как проходит запрос, используя консоль Firebug

Обновление: избегая перенаправления

Похоже, вы не прекращаете нормальную отправку формы, и, таким образом, страница перезагружается;чтобы предотвратить это, вы должны добавить event.preventDefault() в ваш обработчик событий:

$('#your-form-id').submit(function(event) {
    event.preventDefault();
    // Your code here..
});

(или, в вашем случае, в обработчик .click() для #submit, но было бы лучше использовать .submit() для формы, если вы можете однозначно определить ее идентификатор .. или вы можете просто использовать $('#form form').submit( ... ))

0 голосов
/ 21 декабря 2011

Я думаю, что вы должны делать:

if ($type == "ajax")
        echo $this->load->view('messages_list', $data, true); // send data as string for ajax
    else // load the default view
        $this->load->view('default', $data);

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

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