Ответ Ajax возвращает неверный ответ - PullRequest
0 голосов
/ 29 декабря 2018

На моем сайте есть запрос Ajax методом GET.Есть входящие сообщения, некоторые непрочитанные сообщения записываются где-то, где, как только пользователь прочитал непрочитанное сообщение, я обновляю количество непрочитанных сообщений, используя Ajax-запрос к серверу, чтобы получить новое.

Проблема в том, что количество непрочитанных сообщений прямо на стороне сервера, но ответ Ajax не тот, что говорит сервер после прочтения нескольких непрочитанных сообщений.Например, если есть 4 непрочитанных сообщений, когда я нажимаю на сообщение, оно становится 3, когда я нажимаю на другое непрочитанное сообщение, оно будет 3 снова не 2, когда я смотрю на ответ серверанепосредственно в браузере (запрос GET), это 2, а не 3.Поэтому я уверен, что серверная сторона права, но ответ Ajax - нет.

Это мой код, в нем есть несколько кодов Laravel для указания маршрута.Ajax-запрос с комментарием //this is request to unread message имеет проблему.

<script>
    $(function () {
        $.ajaxSetup({
            cache: false
        });

        $(document).on('click', '.messageOutline .card-header', function () {
            var url = '{{route('messages.loadMessage', ":id")}}';
            url = url.replace(":id", $(this).parent().parent().attr('id'));
            $.get(url).done(function (data) {
                $("#messageColumn").html(data);
            });
            if($(this).hasClass('text-primary')){
                $(this).removeClass('text-primary').addClass('text-dark');
                var url = '{{route('messages.unreadMessages', ":id")}}';
                url = url.replace(":id", $(this).attr('id').substring(16));
                var id = $(this).attr('id').substring(16);
                $.get({url:url}).done(function (data) {//this is request to unread messages
                    alert("sent" + data);
                    if(data == 0)
                        $("#user-"+id).find('.count').remove();
                    else{
                        $("#user-"+id).find('.count').html(data);
                    }

                });
            }
        })
    });
</script> 

1 Ответ

0 голосов
/ 29 декабря 2018

Я решил проблему с помощью следующих изменений

        $(document).on('click', '.messageOutline .card-header', function () {
            $.ajaxSetup({ cache: false });
            var url = '{{route('messages.loadMessage', ":id")}}';
            url = url.replace(":id", $(this).parent().parent().attr('id'));
            var object = $(this);
            $.get(url).done(function (data) {
                $("#messageColumn").html(data);
                if(object.hasClass('text-primary')){
                    object.removeClass('text-primary').addClass('text-dark');
                    var url = '{{route('messages.unreadMessages', ":id")}}';
                    var id = object.attr('id').substring(16);
                    url = url.replace(":id", id);
                    $.get({url:url, cache: false}).done(function (data) {
                        if(data == 0)
                            $("#user-"+id).find('.count').remove();
                        else{
                            $("#user-"+id).find('.count').html(data);
                        }
                    });
                }
            });
        })

Я переместил второй Ajax-запрос в функцию успеха первого.Таким образом, я уверен, что число непрочитанных сообщений берется после прочтения сообщения и обновления его свойства read в базе данных.

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