1 / 1 / 0
Регистрация: 15.04.2018
Сообщений: 54

Как использовать AJAX в MVC патерне?

04.01.2021, 17:11. Показов 1377. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, не могу понять как сделать AJAX используя патерн MVC! Код моего Route.php:
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php
 
/**
* Класс Router
* Компонент для работы с маршрутами
*/
class Router
{
 
    /**
     * Свойство для хранения массива роутов
     * @var array
     */
    private $routes;
    /**
     * Конструктор
     */
    public function __construct()
    {
        // Путь к файлу с роутами
        $routesPath = ROOT . '/config/routes.php';
 
        // Получаем роуты из файла
        $this->routes = include($routesPath);
    }
 
    /**
     * Возвращает строку запроса
     */
    private function getURI()
    {
        if (!empty($_SERVER['REQUEST_URI'])) {
            return trim($_SERVER['REQUEST_URI'], '/');
        }
    }
    /**
     * Метод для обработки запроса
     */
    public function run()
    {
        // Получаем строку запроса
        $uri = $this->getURI();
 
        // Проверяем наличие такого запроса в массиве маршрутов (routes.php)
        foreach ($this->routes as $uriPattern => $path) {
 
            // Сравниваем $uriPattern и $uri
            if (preg_match("~$uriPattern~", $uri)) {
 
                // Получаем внутренний путь из внешнего согласно правилу.
                $internalRoute = preg_replace("~$uriPattern~", $path, $uri);
 
                // Определить контроллер, action, параметры
 
                $segments = explode('/', $internalRoute);
                $controllerName = array_shift($segments) . 'Controller';
                $controllerName = ucfirst($controllerName);
 
                $actionName = 'action' . ucfirst(array_shift($segments));
 
                $parameters = array_values(array_merge($segments, $_POST));
 
                // Подключить файл класса-контроллера
                $controllerFile = ROOT . '/controllers/' .
                    $controllerName . '.php';
 
                if (file_exists($controllerFile)) {
                    include_once($controllerFile);
                }
 
                // Создать объект, вызвать метод (т.е. action)
                $controllerObject = new $controllerName;
 
                /* Вызываем необходимый метод ($actionName) у определенного
                 * класса ($controllerObject) с заданными ($parameters) параметрами
                 */
                $result = call_user_func_array(array($controllerObject, $actionName), $parameters);
 
                // Если метод контроллера успешно вызван, завершаем работу роутера
                if ($result != null) {
                    break;
                }
            }
        }
    }
 
}
Вот мои роуты все:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
    return array(
        '^/*$' => 'home/index',
        'login' => 'user/login',
        'register' => 'user/register',
        'account' => 'account/index',
        'logout' => 'user/logout',
        'support' => 'support/index',
        'feed/article/([0-9]+)' => 'feed/article/$1',
        'feed' => 'feed/index',
        'feed/([0-9]+)' => 'feed/index/$1', //pagination
        'cars-select/([0-9]+)' => 'cars/index/$1',
        'cars-select/cars/([0-9]+)' => 'cars/cars/$1',
        'cars-select/([a-z]+)' => 'cars/marks/$1',
        'cars-select' => 'cars/index',
        'market' => 'market/index',
        'admin/users' => 'admin/users',
        'admin/feed/edit' => 'admin/feed',
        'admin/cars/edit' => 'admin/cars',
        'admin' => 'admin/index'
        //'news/([0-9]+)' => 'news/view/$1'
    );
Вот мой AJAX Запрос:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            var select = document.querySelector('.type_cars');
            select.addEventListener('change', (event) => {
                event.preventDefault()
                $.ajax({
                    type: "POST",
                    url: "/admin/cars/edit",
                    dataType: 'text',
                    data: {type_cars: select.value},
                    success: function(data){
                        alert(data)
                    },
                    error: function (r) {
                        alert("Ошибка ajax");
                    }
                });
            })
Вот собственно как можно отправить AJAX НА контроллер и как его обратно отдать на фронтенд(JS)
Помогите пжжж, очень срочно нужно!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.01.2021, 17:11
Ответы с готовыми решениями:

Как использовать AJAX в MVC соблюдая ООП?
Делаю сайт с соблюдением MVC т.е. у меня есть одна страница входа и в зависимости от параметров переданных на нее, создается необходимый...

Ajax запрос в MVC, как вывести товары ajax-ом вместо php?
Всем привет, такая ситуация, сделал я MVC-архитектуру по курсу,все работает нормально, товар выводится в общем все ок, дело в том что мне...

Mvc c# database search js ajax. как реализовать поиск по базе данных
как реализовать поиск по базе данных mvc c# с использованием ajax, что почитать, куда копать, может примеры?

24
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
09.01.2021, 09:10
Студворк — интернет-сервис помощи студентам
Создай отдельный php (без роутера и прочего) файл со следующим кодом
PHP
1
2
<?php
var_dump($_REQUEST);
Сделай на него свой аякс запрос и покажи что выводится.
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
09.01.2021, 13:26
Цитата Сообщение от Stell_artem Посмотреть сообщение
url: "/admin/cars/edit",
при таком url
controller_name - AdminController
action_name - actionCars
parameters:
array(1) {
[0]=>
string(4) "edit"
}

params in controller:
string(4) "edit"

и что вы делаете в AdminController::actionCats ?

Добавлено через 2 минуты
p.s
и break, не сработает
отработают два роута
PHP
1
2
'admin/cars/edit' => 'admin/cars/edit',
'admin' => 'admin/index'
Добавлено через 4 минуты
Цитата Сообщение от Stell_artem Посмотреть сообщение
admin/cars/edit
наверно должно быть
директория\контроллер\метод\а тут параметры
0
1 / 1 / 0
Регистрация: 15.04.2018
Сообщений: 54
10.01.2021, 12:12  [ТС]
Всё я решил всё, спасибо всем!
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
10.01.2021, 12:17
Цитата Сообщение от Stell_artem Посмотреть сообщение
Всё я решил всё
написали бы как. может кому сгодится
0
1 / 1 / 0
Регистрация: 15.04.2018
Сообщений: 54
10.01.2021, 19:01  [ТС]
Вообщем суть в том что нужно в routes.php добавить это:
PHP
1
'feed/ajax' => 'feed/ajax',
Соответственно в контроллере(Любой который у вас есть), делаем action:
PHP
1
2
3
4
5
6
7
8
9
10
11
   public static function adminAjax($data) {
        $data = strtolower($data);
        $data = htmlspecialchars($data);
        $db = Db::getConnection();
        $sql = 'SELECT * FROM model WHERE type LIKE :data OR type';
 
        $result = $db->prepare($sql);
        $result->bindParam(':data', $data, PDO::PARAM_STR);
        $result->execute();
        return $result->fetchAll(PDO::FETCH_ASSOC);
    }
Собственно и сам ajax запрос:
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
26
27
28
29
30
            $(function () {
                $('.type_cars').change(function () {
                    const dat = document.querySelector('.models_cars').options
                    $('select.models_cars').children().remove();
 
 
                    let car = $(this).val();
                    $.ajax({
                        type: "POST",
                        url: "/admin/cars/ajax",
                        dataType: 'json',
                        data: {type_cars: car},
                        success: function (data) {
 
                            console.log(data)
                            data.forEach((arrayItem) => {
                                if (typeof arrayItem === 'object') {
                                    dat[dat.length] = new Option(arrayItem.name, arrayItem.name, false, true);
                                    console.log(arrayItem.name);
                                }
                            })
 
                        },
                        error: function (r) {
                            console.log(r)
                            alert("Ошибка ajax");
                        }
                    });
                })
            })
Только хз как сделать пагинацию таким образом!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.01.2021, 19:01

Как в ASP.NET MVC использовать GridView?
Коллеги, подскажите пожалуйста, как в MVC ASP NET использовать GridView. Я пытаюсь вставить вот такой пример: &lt;asp:GridView...

Как подключить и использовать библиотеку extjs в asp.net mvc 4
Как подключить эту библиотеку и использовать? Простейший бы пример.. Делаю все как подсказывают на оф. сайте и ничего не выходит.....

MVC как добавить новый метод в модель и использовать его
Здравствуйте. Начал писать сайт на mvc, взял за основу материал отсюдова - _habrahabr.ru/post/150267 Вроде все как бы замечательно, но...

Как использовать AJAX через XMLHttpRequest?
Ребята короче есть задание, Первую часть я сделал - сделал страницы, БД тоже использовал .но дальше... Все действия на этих...

Как использовать socket.io + ajax без порта
Возник вопрос, можно ли это реализовать, если нет, то как тогда реализованно на сайте csgo500.com, а именно в этом js (для читабельности...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Опции темы

Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru