У меня возникло некоторое недоумение по поводу того, почему переменные PHP, используемые в переменной html, которую я вставил в функцию успеха .ajax, не обновляют мое сообщение автоматически, но работают нормально при использовании параметра данных, который я указал в функция успеха.
Причина, по которой я предпочитаю вставлять данные, полученные от моего контроллера, заключается в том, что мне нужно использовать некоторые функции Codeigniter, которые я не могу сделать с последними.
Эта версия моей функции, где я использовал параметр данных, работает нормально, но мне нужно использовать функцию word_limiter () из Codeigniter, чтобы уменьшить длину сообщения
Версия с использованием параметра данных
function showFeed() {
$.ajax({
type: 'ajax',
url: '<?= base_url()?>feed/showfeed',
async: false,
dataType: 'json',
success: function(data) {
var html = '';
var i;
for (i = 0; i < data.length; i++) {
html += '<div class="my-3">' +
'<h2>'+ data[i]['title'] + '</h2>' +
'<span class="post-date text-center px-2 py-1"> Posted on ' + data[i]['created_at'] + ' </span>' +
'<p class="my-2">' + data[i]['body'] + '</p><br>' +
'<div class="col-6 offset-3">' +
'<img class="post-image" src="<?= site_url();?>/assets/images/posts/' + data[i]['post_image'] + '"></div>' +
'<div class="my-5">' +
'<a class="btn btn-dark float-left mr-2" href="http://localhost/ci-socmed/post/' + data[i]['slug'] +'">Read More</a>' +
'<form action="http://localhost/ci-socmed/feed/delete/' + data[i]['id'] + '"method="post" accept-charset="utf-8">' +
'<input type="submit" value="Delete" class="btn btn-danger float-left mr-2">' +
'</form>' +
'<a class="btn btn-primary text-white float-left" id="btnEdit" data-toggle="modal" data-target="#editModal" data="' + data[i]['id'] + '">Edit Post</a>' +
'</div></div><div class="clearfix"></div>'
}
$('#nf-post').html(html);
},
error: function() {
alert('Error');
}
});
}
Версия с использованием данных с контроллера подачи
function showFeed() {
$.ajax({
type: 'ajax',
url: '<?= base_url()?>feed/showfeed',
async: false,
dataType: 'json',
success: function() {
var html = '';
html +=
'<?php foreach ($feed as $post): ?>' +
'<div class="my-3">' +
'<h2><?= $post['title'] ?></h2>' +
'<span class="post-date text-center px-2 py-1">Posted on <?= $post['created_at'] ?></span>' +
'<p class="my-2"><?= word_limiter($post['body'], 30) ?></p><br>' +
'<div class="col-6 offset-3">' +
'<img class="post-image" src="<?= site_url();?>/assets/images/posts/<?= $post['post_image'] ?>"></div>' +
'<div class="my-5">' +
'<?php if($this->session->userdata('user_id') == $post['user_id']): ?>' +
'<a class="btn btn-dark float-left mr-2" href="http://localhost/ci-socmed/post/<?= $post['slug']?>">Read More</a>' +
'<form action="http://localhost/ci-socmed/feed/delete/<?= $post['id'] ?>"method="post" accept-charset="utf-8">' +
'<input type="submit" value="Delete" class="btn btn-danger float-left mr-2">' +
'</form>' +
'<a class="btn btn-primary text-white float-left" id="btnEdit" data-toggle="modal" data-target="#editModal" data="<?= $post['id'] ?>">Edit Post</a>' +
'<?php endif; ?>' +
'</div></div><div class="clearfix"></div>' +
'<?php endforeach ?>'
$('#nf-post').html(html);
},
error: function() {
alert('Error');
}
});
}
Функция JQuery для редактирования поста
$(document).on('click', '#btnEdit', function() {
var id = $(this).attr('data');
$('#editModal').modal('show');
$('#editModal').find('.modal-title').text('Edit Post');
$('#modalForm').attr('action', '<?= base_url() ?>feed/update');
$.ajax({
type: 'ajax',
method: 'get',
url: '<?php echo base_url() ?>feed/edit',
data: {
id: id
},
async: false,
dataType: 'json',
success: function(data) {
$('textarea[name=edit-body]').val(data.body);
$('input[name=post-id]').val(data.id);
},
error: function() {
alert('Could not Edit Data');
}
});
});
Регулятор подачи
class Feed extends CI_Controller
{
public function index($page = 'index')
{
if (!file_exists(APPPATH . 'views/feed/' . $page . '.php')) {
show_404();
}
$data['title'] = ucfirst($page);
$data['feed'] = $this->Feed_mdl->get_feed();
$this->form_validation->set_rules('post-text', '', 'required', array('required' => 'Your post is empty.'));
if ($this->form_validation->run() === FALSE) {
$this->load->view('templates/header');
$this->load->view('feed/' . $page, $data);
$this->load->view('templates/footer');
}
}
}
Моя функция showfeed ()
public function showfeed() {
$this->db->order_by('id', 'desc');
$query = $this->db->get('feed');
if($query->num_rows() > 0){
return $query->result();
}else{
return false;
}
}
Когда я использую версию, которая извлекает данные из контроллера ленты, база данных обновляет ее, за исключением того, что мне нужно обновить страницу, чтобы увидеть, какие изменения я внес в свое сообщение, в отличие от другой версии.
EDIT
Только что проверил, что я поместил неправильный код во вторую функцию showfeed (), где я использовал объект $data['feed]
из контроллера подачи, в котором, если я использовал эту версию showfeed (), я перезагружаю страницу вручную, чтобы чтобы просмотреть изменения, которые я сделал в своем сообщении. Извините за путаницу.