Форум программистов, компьютерный форум, киберфорум
PHP: Laravel
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 21.11.2018
Сообщений: 30

Перенаправление Ajax + Laravel

07.12.2019, 01:11. Показов 3610. Ответов 8

Author24 — интернет-сервис помощи студентам
С Laravel знаком не так давно, подскажите, кто знает! Ситуация следующая: Аяксом отправляю данные формы на контроллер CheckController, данные приходят, делается запрос в таблицу, далее условие - если пусто, вернет 0 ну и ajax сгенерирует вывод сообщения, НО если данные есть в массиве то вопрос - как перейти (загрузить) нужный вид? Простой return view(...) соответственно, отправляет только html сущность. Всё происходит на главной странице, поэтому не хотелось бы ломать вёрстку, а загрузить всё на отдельный вид - check

форма которая отправляет в ajax данные
PHP Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<form action="" method="post" class="p-relative check__form">
                <i class="fa fa-cog fa-spin fa-3x fa-fw check__spin"></i>
                <div class="check__info"></div>
                <div class="check__overlay p-3">
                    <div class="input-group mb-3">
                      <select class="custom-select border-0" name="brand" id="brand">
                        <option selected disabled>Марка</option>
                        @forelse($partners as $brand)
                        <option value="{{ $brand->name }}">{{ $brand->name }}</option>
                        @empty
                            Всё занято
                        @endforelse
                      </select>
                      <select class="custom-select border-0" name="models" id="models">
                        <option selected disabled>Модель</option>
                      </select>
                      {{ @csrf_field() }}
                        <div class="input-group-append">
                            <input class="btn btn-outline-secondary site-button" type="submit" value="Проверить наличие">
                        </div>
                  </div>
                </div>
            </form>
JS код с Ajax
думал может через location загрузить, ни знаю как вместе с ним данные отправить
JavaScript Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$('.check__form').on('submit', function(e) {
        e.preventDefault();
        let path = location.href,
            newPath = path+'check';
        // console.log(newPath);
        $.ajax({
            url: '/check',  // CheckController
            type: 'POST',   
            data: $('form').serialize(),    // отправляемые данные
            success: function(res) {
                // console.log(res);
                if (res == 0) {
                    $('.check__info').text('Данные модели заняты').hide(5000);
                } else {
                    return location.replace(newPath);
                }
            },
            // complete: function() {
            //  $('.check__info').text('').show();
            // },
            error: function() {
                alert('Ошибка!!!');
            }
        });
    });
CheckController,
PHP Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public function execute(Request $request)
    {
        $data = $request->except('_token');
        $brand = $request->brand;
 
        if (!isset($data['models'])) {
            $models = Auto::distinct()->select('models')->where('brand', $brand)->get();
            $block = '';
            foreach ($models as $model) {
            $block .= <<<EOD
                <option value="{$model->models}">{$model->models}</option>
EOD;
            }
 
            echo $block;
            die;
        } else {
            $menu = DB::table('menus')->get();
            $autos = Auto::select('id', 'models', 'classes', 'brand', 'desc', 'engine', 'speed', 'price', 'colors', 'img')
            ->where([
                ['brand', $data['brand']],
                ['models', $data['models']],
                ['status', 'free']
            ])->get()->toArray();
 
            if (!empty($autos)) {
                return view('check', ['menu' => $menu, 'autos' => $autos]);
                // return redirect('/check');
            } else {
                echo 0;
                die;
            }
        }
 
    }
Подскажите, кто знает!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.12.2019, 01:11
Ответы с готовыми решениями:

Ajax запрос на нескольких адресах Laravel
Доброго времени суток. Имеется js с ajax кодом $('#btntr').click(function(){ $.ajax({ type:&quot;POST&quot;, ...

Laravel Ajax запросы не работают, выдает ошибку 500
Доброго времени суток! Проблема в том, что ajax запрос в консоли браузера выдает вот что: &quot;Ошибка: Failed to load resource: the...

Перенаправление на ajax url
Здравствуйте. В общем хочу использовать примерно похожий на этот - метод. path = window.location.search; // ?page=portfolio ...

8
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
07.12.2019, 08:48
С аякса нужно вернуть ID сущности и потом на клиенте делаешь редирект на нужную страницу с видом. По URL передаешь ID сущности и потом подгружаешь ее вместе с страницей.

Всякие echo, die в ларавел не нужны, а html отправлять вообще плохая практика. Используйте response()->json()
1
0 / 0 / 0
Регистрация: 21.11.2018
Сообщений: 30
07.12.2019, 09:11  [ТС]
По URL передаешь ID сущности - то есть, хотите сказать, передать GET - ом, а потом в JS редирект спомощью location ? правильно понял?
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
07.12.2019, 09:26
Да.
А можно без ajax сделать, тогда можно будет сразу делать return view()... меньше запросов.
0
0 / 0 / 0
Регистрация: 21.11.2018
Сообщений: 30
07.12.2019, 10:29  [ТС]
а как мне без ajax проверить - есть ли данные и если нет, вывести сообщение? Было бы еще лучше. И да, если данные есть то сразу в вид
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
07.12.2019, 10:39
В смысле как? Точно также. Для сервера нет разницы ajax это или не ajax.
0
0 / 0 / 0
Регистрация: 21.11.2018
Сообщений: 30
07.12.2019, 10:45  [ТС]
Цитата Сообщение от tarasalk Посмотреть сообщение
ajax это или не ajax
это я понимаю, но если без ajax отправляю данные к контролеру Check Controller, он запрос к таблице и если вернет пустой массив, как мне на той же странице, без перезагрузки вывести сообщение, что данных нет?
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
07.12.2019, 11:10
Без перезагрузки это AJAX. Но тогда будет лишний запрос при редиректе на другую страницу.
А если хотите совсем по феншую, чтобы без перезагрузок и лишних запросов, то нужно делать SPA. На vue.js + laravel это довольно легко делается.
0
0 / 0 / 0
Регистрация: 21.11.2018
Сообщений: 30
07.12.2019, 15:14  [ТС]
За response()->json() спасибо, решил сделать немного по другому, но возникла еще загвоздка через response()->json() отсылаю массив в JS, там перебор и вставляю блок в html
JavaScript Скопировано
1
2
3
4
5
let block = '';
$.each(resJson, function(arr, data) {
    $.each(data, function(key, val) {
        block += '<option value="' + val.models + '" data-class="' + val.classes + '" >' + val.models + '</option>';});
});
Всё вставляется, замечательно, когда выбираю option, отслеживается событие change
JavaScript Скопировано
1
2
3
4
$('.check__form').on('change', '#models', function() {
    var autoClass = $(this).data('class');
    console.log(autoClass);
})
И скрипт выдает undefined вместо значения data атрибута, если другой поставить для проверки - .val() например, вместо .data('class'), то возвращает что нужно, а .data('class') undefined, И через attr() тоже пробывал - такая же история. В чём может быть дело?

Добавлено через 22 минуты
Хотя всё, уже разобрался ) Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.12.2019, 15:14
Помогаю со студенческими работами здесь

Jsoup & js ajax получение данных из бд ajax (или как-то так :)
Привет! Есть сайт с видео, на нем мне нужная страница с информацией. Парсил с помощью Jsoup, в принципе и до сих пор ней пользуюсь, но с...

Определить AJAX библиотеку или отследить AJAX запрос любым методом
Требуется определить какая библиотека используется на сайте для создания AJAX запросов. Стандратный запрос типа windows.jquery.active не...

После вставки ответа ajax в input запроса, ответ ajax не изменяется
Здравствуйте! В общем так, есть поле input, есть таблица с полем count. Задача: изменить содержимое поле count по средством ajax, но при...

Выполнение AJAX для подгруженных AJAX-зависимых ссылок
Форма авторизации/регистрации. &lt;form class=&quot;authForm&quot; method=&quot;post&quot;&gt; &lt;input name=&quot;login&quot; type=&quot;text&quot;...

Ajax загрузка формы из загруженного через ajax блока
Вообщем, через ajax в блок подгружается форма, из нее нужно загрузить в этот же блок др.контент. $('#form').submit(function(e){ ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Линейное решение нелинейной задачи. Формулы от LM по моему решению пока не проверял. В итоговой её формуле видно её заблуждение.
Hrethgir 10.04.2025
В продолжение Эта LM дала ответ похожий на нормальный. В комментриях мой комментарий - похоже она ошиблась с выведением итоговой формулы, но остальные проверю. Assistant qwen2. 5-14b-instruct . . . .
Переменные в Python
py-thonny 10.04.2025
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не. . .
Многопоточность в C#: Task и асинхронные операции
UnmanagedCoder 10.04.2025
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости. . .
Линейное решение не линейной задачи (емкость вычислений в сравнении с традиционными решениями пока не определена).
Hrethgir 10.04.2025
В рамках предстоящих вычислений пришлось (да, я тоже знаю про корень числа, и про степеня, и прочие теоремы, но. . . ) найти способ нахождения отношения двух углов. . . .
Запуск контейнеров Docker на ARM64
Mr. Docker 09.04.2025
Появление таких решений, как Apple M1/ M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,. . .
Vue SFC компонент на PHP с Fusion
Jason-Webb 09.04.2025
PHP на сервере и JavaScript на клиенте — классическое сочетание, которое, несмотря на свою эффективность, создает определенный когнитивный диссонанс при разработке. В этом контексте появляются. . .
TypeScript vs JavaScript: Отличия и когда что использовать
Reangularity 09.04.2025
JavaScript появился в 1995 году как творение Брендана Эйха и быстро стал основой интерактивности в вебе. За свою историю он прошел путь от простого языка для манипуляций с DOM до полноценной. . .
Подключение Kafka к Elasticsearch
Codd 09.04.2025
Apache Kafka и Elasticsearch — две мощные технологии, которые при совместном использовании создают эффективную платформу для обработки и анализа данных в реальном времени. Kafka, выступая в роли. . .
Реализации таймеров в Unity
GameUnited 09.04.2025
Время — важный ресурс любой игры. Разработка качественных игровых механик невозможна без грамотного управления временем, а таймеры выступают ключевым инструментом этого управления. Представьте себе. . .
Функции высшего порядка в JavaScript
run.dev 09.04.2025
Функции высшего порядка представляют собой один из фундаментальных камней функционального программирования в JavaScript. По сути, это функции, которые либо принимают другие функции в качестве. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер