Я пытаюсь использовать AJAX и JSON внутри CodeIgniter.Я никогда раньше не использовал ни одну из этих технологий, но я начинаю понимать, как это сделать.
Вот что я пытаюсь достичь ...
На моем сайте пользователи могут"люблю" посты других пользователей на форумах.Я бы хотел, чтобы счетчик рядом со ссылкой на любовь обновлялся автоматически с использованием AJAX и JSON.
Вот соответствующий код:
ПРОСМОТР: простая ссылка HTML, используемая для добавления любви к счетчику.
<p><a href="#" class="love"><?php if ($post->love) { echo $post->love; } else { echo 0; } ?></a></p>
JQUERY: Вызывается при нажатии на ссылку выше.Он вызывает функцию / ajax / love_forum_post (код ниже) и передает некоторые данные для записи и идентификаторы активных пользователей (2 и 1, которые я жестко запрограммировал на данный момент).Затем он увеличивает счет на 1 и переключает класс.
$(document).ready(function(){
$('.love').click(function() {
$.ajax({
type: 'GET',
url: base_url + '/ajax/love_forum_post',
data: { post_id: 2, user_id: 1, ajax: 1 },
});
var num = parseInt($.trim($(this).html()));
$(this).html(++num).toggleClass('loved');
return false;
});
});
КОНТРОЛЛЕР: функция, вызываемая Ajax при нажатии на ссылку.
public function love_forum_post()
{
$post_id = $this->input->get('post_id');
$user_id = $this->input->get('user_id');
$is_ajax = $this->input->get('ajax');
if ($is_ajax)
{
$this->load->model('forums_model');
$total_loves = $this->forums_model->add_love($post_id, $user_id);
echo json_encode($total_loves);
}
// If someone tries to access the AJAX function directly.
else
{
redirect('', 'location');
}
МОДЕЛЬ: И, наконец, модельфункция, которая вызывается, чтобы добавить любовь к базе данных и вернуть новый счетчик, который захватывается в контроллере с помощью JSON (я думаю).
function add_love($post_id, $user_id)
{
// Check that the user has not already loved the post.
$this->db->select('id');
$this->db->from('post_rating');
$this->db->where('post_id', $post_id);
$this->db->where('user_id', $user_id);
$query = $this->db->get();
// If they have not already loved the post.
if ( ! $query->num_rows() > 0)
{
$data = array(
'post_id' => $post_id,
'user_id' => $user_id,
'rating' => 1
);
// If a new love is added, return the new count.
if ($this->db->insert('post_rating', $data))
{
$this->db->select('id');
$this->db->from('post_rating');
$this->db->where('post_id', $post_id);
$this->db->where('user_id', $user_id);
$query = $this->db->get();
return $query->num_rows();
}
}
}
Итак ...
- Как мне получить этот новый счетчик любви с помощью JSON и заставить мой счетчик показывать новый итог?
- Есть ли в моем коде что-то еще, что следует изменить / улучшить?
- И, наконец,Я не могу использовать метод POST, так как у меня включена защита CSRF.Как я могу изменить свой код, чтобы позволить использовать метод POST вместо GET?Или метод GET подходит для этого?
Спасибо, я все еще очень зеленый, когда дело доходит до PHP, CodeIgniter, AJAX и jQuery.Наслаждаясь вызовом!