Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 15.04.2018
Сообщений: 54

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

04.01.2021, 17:11. Показов 1374. Ответов 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
Ответ Создать тему
Новые блоги и статьи
мат медиц модель 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
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru