AJAX не обновляет сообщение, когда код PHP хранится внутри функции .html - PullRequest
0 голосов
/ 01 июля 2019

У меня возникло некоторое недоумение по поводу того, почему переменные 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 (), я перезагружаю страницу вручную, чтобы чтобы просмотреть изменения, которые я сделал в своем сообщении. Извините за путаницу.

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