передать значение PHP обратно в функцию AJAX в случае успеха - PullRequest
0 голосов
/ 01 июня 2019

Я строю временную шкалу AJAX для сообщений на стене, и у меня есть следующая функция, чтобы проверять наличие новых сообщений и затем публиковать новые на стене, подобно тому, как работает Twitter:

wall_posts.php

$news = tz::shared()->news->getNew(25);

<div id="wall_posts">
    <?php foreach ($news as $news_post) { ?>
        <div class="wall_post"><?php echo $news_post['message']; ?></div>
    <?php } ?>
</div>

JQuery:

function checkForNewPosts() {

    // This represents the last record in the table AKA the "most recent" news
    var lastCustomerNewsID = <?php echo $news[0]['id']; ?>;

    $.ajax({
        url: "example.com/ajax.php",
        method: "post",
        data:{
            lastCustomerNewsID: lastCustomerNewsID,
        },
        dataType:"text",
        success:function(data)
        {
            $('#wall_posts').prepend(data);
        }
    });

}

setInterval(checkForNewPosts, 10000);

Приведенный выше массив новостей PHP с индексом 0 указывает на то, что это последний / последний идентификатор в массиве / таблице

PHP (ajax.php):

if ($_POST) {

    $lastCustomerNewsID = $_POST['lastCustomerNewsID'];

    $new_posts = tz::shared()->news->getNewForWall($lastCustomerNewsID);

    $output = '';

    if ($new_posts) {

        foreach ($new_posts as $new_post) {

            $output .= "<div class='wall_post'>";
                $output .= $new_post['message'];
            $output .= "</div>";

        }

    } else {

    }

    echo $output;

}

Примечание. Функция getNewForWall извлекает записи с идентификатором, превышающим аргумент, переданный в

Это прекрасно работает при получении нового сообщения, однако проблема в том, что мне нужно обновлять «последний идентификатор» до «самого нового идентификатора» из новых записей, возвращаемых в ajax.php при каждом запуске функции, потому что в настоящее время один раз он захватывает самые новые сообщения в первый раз, он постоянно распознает их как новые.

Как я могу передавать новейший "последний идентификатор" из массива в ajax.php обратно в функцию AJAX при каждом запуске? Могу ли я передать отдельную переменную обратно в функцию AJAX?

Спасибо!

1 Ответ

0 голосов
/ 01 июня 2019

Прежде всего, я думаю, что здесь PHP должен возвращать JSON вместо информации HTML JQuery должен обрабатывать JSON для генерации HTML-информации

PHP-код выглядит следующим образом (это пример)

<?php
$page   = $_POST['page'];
$method = $_GET['method'];

if ($method == "list") {
    $limit  = 20;
    $offset = ($page - 1) * $limit;

    $post = new Post();

    // Calculate offsets according to page limits and page numbers and query articles
    //Let's assume that the field of content is "content"
    $offset    = ($page - 1) * $limit;
    $post_list = $post->offset($offset)->limit($limit)->select();
    $total = $post->offset($offset)->limit($limit)->count(); //Statistics of all entries 

    //Get the largest ID by ID sort
    $last_id = $post->order('id desc')->find();
    $last_id = $last_id['id'];
    echo json_encode([
        'last_id'   => $last_id,
        'post_list' => $post_list,
        "maxpage"=>ceil($total / $limit), //Calculate the maximum number of pages
    ]);
} elseif ($method == 'last_check') {
    $post = new Post();
    //Get the largest ID by ID sort
    $last_id = $post->order('id desc')->find();
    $last_id = $last_id['id'];
    echo json_encode([
        'last_id' => $last_id,
    ]);
}

Теперь мы можем проверить, есть ли новые статьи через таймеры и перелистывание страниц. И вы можете использовать maxpage, чтобы определить, есть ли следующая страница.

function checkForNewPosts() {

    $.ajax({
        url: "example.com/ajax.php?method=last_check",
        method: "get",
        dataType:"json",
        success:function(data)
        {
            if(data.last_id>lastCustomerNewsID){
                //Write a new post operation here.

                lastCustomerNewsID = data.last_id;
            }
        }
    });

}

function getNextPage(){
    var html;
    page = page + 1;
    $.ajax({
        url: "example.com/ajax.php?method=list",
        method: "post",
        data:{
            "page": page
        },
        dataType:"json",
        success:function(data)
        {
            //Collate JSON into the required HTML format
            html = "";
            $.each(data.post_list, function(i, item){      
                html = html + "<div class='wall_post'>" + item.contect + "</div>";
            });   
            if(data.last_id>lastCustomerNewsID){
                //Write a new post operation here.
                lastCustomerNewsID = data.last_id;
            }
            if(data.maxpage<=page){
                //If there is no next page 

            }

            $('#wall_posts').prepend(data);
        }
    });
}

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