Вывод данных и сообщений прямо в представление

В настоящее время я работаю над ajax, jquery и javascript. У меня с этим небольшие проблемы.

Я могу использовать этот код для отправки данных, и они хранятся в базе данных. Но данные не будут отображаться сразу после отправки в представлении, пока я не перезагружу страницу.

Как я могу вывести данные прямо в представление, не перезагружая страницу?

Как я могу выводить сообщения об ошибках и успешном выполнении в виде сообщения flashmessage (toastr)?


как я могу переписать этот код, который работает? Я получаю сообщение об ошибке, что это дубликат селекторов.

    $('#todolist-create-modal').modal('hide');
    $('#todolist-create-modal').on('keypress', ":input:not(textarea)", function(event) {
                        return event.keyCode != 13;
});

Код

   <script type = "application/javascript">
    $(document).ready(function () {
        var CSRF_TOKEN = $('meta[name = "csrf-token"]').attr('content');

        $('#add-todo-list').click(function(e) {
            e.preventDefault();
            var _token = $("input[name='_token']").val(); // get csrf field.
            var title = $("input[name='title']").val();
            var description = $("textarea[name='description']").val();
            var privacy = $("select[name='privacy']").val();
            var listid = $("select[name='privcy']").val();
            $.ajax({
                url:'{{ route('todolists.store') }}',
                type: 'POST',
                data: {_token:_token, title:title, description:description, privacy:privacy},
                success: function (data) {
                    console.info(data);

                    if (privacy = 0) {

                        //go to the left side

                    } else {

                        //go to the right side

                    }
                },
                error: function(data){
                    console.info(data);
                }
        });
            $('#todolist-create-modal').modal('hide');
            $('#todolist-create-modal').on('keypress', ":input:not(textarea)", function(event) {
                return event.keyCode != 13;
            });
        });

    });
</script>

Посмотреть

<div id = "content" class = "dashboard padding-10">
        <div class = "row">
            <div class = "col-md-offset-3 col-md-6">
                <a data-toggle = "modal" data-target = ".todolist-create-modal" class = "btn btn-success btn-block btn-sm margin-bottom-10">Neue Liste erstellen</a>
            </div>
        <div class = "col-md-6">
            <div id = "panel-misc-portlet-l3" class = "panel panel-default text-center">
                <div class = "panel-heading nohover">
                    <span class = "elipsis">
                        <strong>Öffentliche Tasks</strong>
                    </span>
                </div>
            </div>
            <div class = "alert alert-danger margin-bottom-30 {{ $todolistpublic->count() ? 'hidden' : '' }}">
                Es wurden keine <strong>Einträge</strong> gefunden.
            </div>
            @foreach ($todolistpublic as $list)
                <div id = "todo-list-{{$list->id}}" class = "panel panel-default panel-primary margin-bottom-0">
                    <div class = "panel-heading panel-pointer">
                            <span class = "elipsis"><!-- panel title -->
                                <strong>{{ $list->title }}</strong> <span class = "label label-info white">0</span>
                            </span>
                        <ul class = "options pull-right relative list-unstyled hover-visible">
                            <li><a data-toggle = "modal" data-target = ".task-modal" class = "btn btn-success btn-xs white hover-hidden">
                                    <i class = "fa fa-plus"></i> Erstellen
                                </a>
                            </li>
                            <li><a data-toggle = "modal" data-target = ".todolist-modal" data-id = "{{ $list->id }}" data-title = "{{ $list->title }}" data-description = "{{ $list->description }}" class = "btn btn-info btn-xs white hover-hidden">
                                    <i class = "fa fa-edit"></i> Bearbeiten
                                </a>
                            </li>
                            <li><a data-toggle = "modal" data-target = ".todolist-delete-modal" data-id = "{{ $list->id }}" data-title = "{{ $list->title }}" data-description = "{{ $list->description }}" class = "btn btn-danger btn-xs white hover-hidden">
                                    <i class = "fa fa-times"></i> Löschen
                                </a>
                            </li>
                            <li><a href = "#" class = "opt panel_colapse" data-placement = "bottom"></a></li>
                        </ul>
                    </div>
                    <div class = "panel-body">
                        <div class = "slimscroll" data-always-visible = "false" data-rail-visible = "false" data-railOpacity = "1" data-height = "100">
                            {{ $list->description }}
                        </div>
                    </div>
                </div>
            @endforeach
            <div class = "panel-footer mtm-10">
                <span id = "todo-list-counter-public">{{ $todolistpublic->count() }}</span> <span>{{ $todolistpublic->count() > 1? 'Listen' : 'Liste' }}</span>
            </div>
        </div>

        <div class = "col-md-6">
            <div id = "panel-misc-portlet-l3" class = "panel panel-default text-center">
                <div class = "panel-heading nohover">
                    <span class = "elipsis">
                        <strong>Private Tasks</strong>
                    </span>
                </div>
            </div>
            <div class = "alert alert-danger margin-bottom-30 {{ $todolistprivate->count() ? 'hidden' : '' }}">
                Es wurden keine <strong>Einträge</strong> gefunden.
            </div>
            @foreach ($todolistprivate as $list)
                <div id = "todo-list-{{$list->id}}" class = "panel panel-default panel-primary margin-bottom-0">
                    <div class = "panel-heading panel-pointer">
                            <span class = "elipsis"><!-- panel title -->
                                <strong>{{ $list->title }}</strong> <span class = "label label-info white">0</span>
                            </span>
                        <ul class = "options pull-right relative list-unstyled hover-visible">
                            <li><a data-toggle = "modal" data-target = ".task-modal" class = "btn btn-success btn-xs white hover-hidden"><i class = "fa fa-plus"></i> Erstellen</a></li>
                            <li><a data-toggle = "modal" data-target = ".todolist-modal" class = "btn btn-info btn-xs white hover-hidden"><i class = "fa fa-edit"></i> Bearbeiten</a></li>
                            <li><a href = "#" class = "btn btn-danger btn-xs white hover-hidden"><i class = "fa fa-times"></i> Löschen</a></li>
                            <li><a href = "#" class = "opt panel_colapse" data-placement = "bottom"></a></li>
                        </ul>
                    </div>
                    <div class = "panel-body">
                        <div class = "slimscroll" data-always-visible = "false" data-rail-visible = "false" data-railOpacity = "1" data-height = "100">
                            {{ $list->description }}
                        </div>
                    </div>
                </div>
            @endforeach
            <div class = "panel-footer mtm-10">
                <span id = "todo-list-counter-private">{{ $todolistprivate->count() }}</span> <span>{{ $todolistprivate->count() > 1? 'Listen' : 'Liste' }}</span>
            </div>
        </div>

        @include('elements.addTodoList')
        @include('elements.createTodoList')
        @include('elements.addTask')
    </div>
</div>

Контроллер

public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        'title' => 'required|min:5',
        'description' => 'required|min:10',
        'privacy' => 'required|integer'
    ]);

    $attributeNames = array(
        'title' => 'Title',
        'description' => 'Description',
    );
    $validator->setAttributeNames($attributeNames);
    //Redirect back if validation fails
    if ($validator->fails()) {
        return response()->json(['error'=>$validator->errors()->all()]);
    }
    else{
        $todolists = new Todolists();
        $todolists->admin_id = Auth::id();
        $todolists->title = $request->title;
        $todolists->description = $request->description;
        $todolists->privacy = $request->privacy;
        $todolists->save();

        return response()->json(['Your enquiry has been successfully submitted!']);

    }

}

РЕДАКТИРОВАТЬ

Я исправил и адаптировал код. На данный момент у меня есть еще две проблемы:

Флэш-сообщение выводится только как «пустое». Без текстового содержимого. В чем проблема?

Div также перезагружается. Но после того, как он был загружен, я не могу отправить тот же запрос снова. Надо что-то сбрасывать или в чем ошибка?

Когда я выдаю ошибки в консоли с помощью console.info(data);, я получаю следующие сообщения об ошибках: {ошибка: массив (2)} ошибка : (2) [«Название ist erforderlich.», «Описание ist erforderlich.»]

<script type = "application/javascript">
    $(document).ready(function () {
        var CSRF_TOKEN = $('meta[name = "csrf-token"]').attr('content');

        $('#add-todo-list').click(function(e) {
            e.preventDefault();
            $('.todolist-create-modal').on('keypress', ":input:not(textarea)", function(event) {
                return event.keyCode != 13;
            });

            var _token = $("input[name='_token']").val(); // get csrf field.
            var title = $("input[name='title']").val();
            var description = $("textarea[name='description']").val();
            var privacy = $("select[name='privacy']").val();
            $.ajax({
                url:'{{ route('todolists.store') }}',
                type: 'POST',
                data: {_token:_token, title:title, description:description, privacy:privacy},
                success: function (response) {
                    if (response.error) {
                        _toastr((response),"top-full-width","error",false);
                    }
                    else{
                        $('.todolist-create-modal').modal('hide');
                        $("#content").load(location.href+" #content>*","");
                        _toastr((response),"top-full-width","success",false);
                    }
                }
            });
        });
    });
</script>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
36
1

Ответы 1

В: Как я могу вывести данные прямо в представление, не перезагружая страницу?

Один из способов с помощью jQuery - загрузка частичного содержимого, он снова запросит страницу, получит содержимое #содержание div и заменит HTML, быстро и без перезагрузки страницы:

$("#content").load("/url-of-page > #content > *");

В: Как я могу выводить сообщения об ошибках и успешном выполнении в виде сообщения flashmessage (toastr)?

Просто напишите сообщение в HTML-элементе:

success: function(data){
   $(".alert-danger").addClass("hidden");
   $(".alert-success").html(data.msg).removeClass("hidden");
},
error: function(data){
   $(".alert-success").addClass("hidden");
   $(".alert-danger").html(data.error).removeClass("hidden");
}

Другие вопросы по теме