За последние 24 часа нас посетили 22287 программистов и 994 робота. Сейчас ищут 604 программиста ...

Проблема с Ajax в Yii

Тема в разделе "Yii", создана пользователем AnonimS, 7 фев 2018.

Метки:
  1. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Всем доброго времени суток!

    Взялся тут за интересную задачку - файловый менеджер. В целом картина понятна, на чистом PHP, используя процедурный метод написал, все работает в стеке с JQ и AJAX'ом. Решил переписать под ООП и при помощи Yii. Yii изучать начал недавно, как собственно и ООП. Переписал весь HTML во view, далее контроллер, ну уперся в то, что мне надо отправить ajax запрос и получить данные в div. Как это работает я понимаю, там ничего сложного, то куда отправлять никак не могу понять, пока URLmanager отключил. Получается надо отправить запрос в метод определенного контроллера, если есть кто работал с такой задачкой, прошу подсказать, хотя бы методологию как это работает..
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @AnonimS, я с Yii не работал, но по поводу Ajax могу сказать, что к нему нужно относиться так же, как и к запросам, которые бы вы отправляли обычным способом. Если на время забыть про Ajax, то вы смогли бы написать тоже, но без него, разобрались бы какой путь нужно прописывать в ссылках или формах?
     
  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
  4. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Получается я подгружаю все одним jS файлом в AppAsset.php, все функции отрабатывают как надо, а вот ajax, вот кусок
    Код (Javascript):
    1. function ajaxOpenDir(dir) {
    2.         if (dir == undefined){
    3.             var dir = '';
    4.         }
    5.         $.ajax({
    6.             type: "POST",
    7.             url: 'php/obr.php',
    8.             data: {
    9.                 dir: dir
    10.             },
    11.             success: function(data){
    12.  
    13.                 $('.box').text('');
    14.                 $('.box').append(data);
    15.                 fontSizeAnim(0);
    16.                 if(anim == 0) {
    17.                     $('.box-elem').show();
    18.                 } else $('.box-elem').slideDown(800);
    19.             }
    20.         });
    21.     }
    Cоответственно мне надо отправить в метод, к примеру actionAjax, контроллера FileController, а потом во View отобразить то что пришло из этого метода, соответственно я в этом методе делаю что надо и вызываю его в actionIndex, который в свою очередь получает данные от actionAjax и передает render View index. Вроде как-то так, да?
    --- Добавлено ---
    Можно и так, но хотелось бы понять как это работает, раз столкнулся с задачей.
     
  5. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Что именно понять? Ajax? Там понимать особо нечего. Передача данных идёт в фоновом режиме. То есть, все данные передаются как обычно, но только страница при этом не перезагружается.
    --- Добавлено ---
    В Ajax даже протокол передачи данных такой же, в отличии, например, от WebSocket и т.д.
     
  6. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Да нет, я с вами согласен, просто смысл в том, никак не могу понять как из подгружаемого JS отправить запрос в метод контроллера, а через ajax или другим способом это я думаю 2-й момент.
     
  7. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    я так вижу, что суть проблемы могла бы быть переформулирована следующим образом: "Я смутно представляю о том, что такое JavaScript и как он работает". В таком случае, нужно пройти "курс молодого бойца" по этому направлению.
     
  8. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Спасибо, буду изучать. JS знаю не очень хорошо, скорее только верхушки
     
  9. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    Я разочарован в Yii и во всех фрэймворках)
    Деревянная тормознутая хрень)
     
    Deonis нравится это.
  10. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Надо получается заново учить методы, можно обратиться $_POST, а в YII для этого есть метод, по сути одна и та же функция. Зато в фрэймворках какие-то простые задачи уже реализованы, но пока поймешь как обратиться я бы уже сам все написал на чистом. Пока у меня складывается впечатления, что те же предложения, но другими буквами..
     
  11. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    зато один раз поймешь и сможешь работать над большими проектами в команде)
    Yii2 популярен весьма.
     
  12. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Ваша правда, Yii2 для команды и больших проектов. Самое главное практика, поэтому и решил посмотреть что и как там на простом примере и сразу уперся...
     
  13. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    а мне Yii2 очень понравился)) crud генератор вообще клевый))
     
  14. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    лучше с yii2 помучиться, чем с вордпрессом
     
    Алекс8 нравится это.
  15. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    работать с ним может быть и приятно
    речь о том,что странички грузятся нудновато
    я же дно в этом деле. только погружаюсь в фрэймворки :)
    но уже хочу свой летающий лясик)
    --- Добавлено ---
    к подобным цмс даже приближаться не хочу)
     
  16. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    это 100 процентов... yii2 намного более логичный и понятный чем WP
     
  17. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @Алекс8 изучать wordpress, после yii2, это ад.
     
  18. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Вы не знаете, что такое ад )) Если вдруг программистский бог решит над вами поиздеваться, то вы столкнетесь с OpenCart ))
     
  19. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Не замечал. Yii на себя очень мало ресурсов берёт. Вот Laravel - это нечто, особенно на слабой машине.
    Не самое страшное, с чем я работал. Да, вечное тупое переливание из пустого в порожнее, коим наполнены его контроллеры, бесит, а так работать можно. Вот после 2 месяцев с UMI CMS сказал, что не за какие деньги больше туда не сунусь.
     
    mahmuzar нравится это.
  20. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Программистский бог однажды меня проклял и я раскуривал контроллер ларки на две тысячи строк, один на всё приложение, вот это было ох )
     
  21. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Надо тут создать раздел для реабилитации пострадавших от CMS. Начало, как в клубе анонимных алкоголиков. Заходит новичок:
    -- Здравствуйте! Меня зовут Вова и я работал с Joomla.
    -- Здра-а-а-вствуй, Вова!, - с понимающим и удрученным видом приветствуют обитатели форума.
    -- (со слёзами на глазах) От меня отвернулись коллеги, я перестал развиваться и деградировал целый год
    -- У-у-у...
    -- (долгое рыдания, раскаяние)
    Дальше работа с психологами, расслабляющие процедуры простыми циклами for и foreach, восстановление в памяти человеческих паттернов и т.д. Уже через месяц, избавившись от ночных кошмаров, говнокод выйдет из организма естественным путем и тогда, чтобы не шокировать сразу, можно будет человеку рассказать о том, что в мире уже есть PHP7, а 5.2 уже как бы не в моде.
     
    TeslaFeo, mahmuzar, Dimon2x и ещё 1-му нравится это.
  22. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    К слову о самом страшном: интернет магазин, фронт реализован на бэкбоне, но через жопу. Не, не так - через ЖОПУ. С одной стороны, начиналось у них всё нормально, отдельные куски фронта разбиты на компоненты из которых фронт собирается, но дальше что-то пошло не так и практически все компоненты были реализованы в трех экземплярах: бэкбоновский тэмпл, вьюха в ларке как часть страницы и отдельный вариант что бы отдать аяксом. Это не считая того, что иногда компоненты в разных разделах рисовались чуть по другому и потому, естественно к ним прилагалось ещё три варианта )
     
  23. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Вернёмся с офтопа. Смотрите, если вы можете написать из строки браузера example.com/site/hello, чтобы вызвать actionHello контроллера Site, то совершенно также вы можете скормить этот url для ajax-вызова. Ну или какие там урлы у вас без UrlManager, вроде типа example.com/index.php?r=site/hello (никогда не работал без UrlManager)
    PHP:
    1. $.ajax({
    2.             type: "POST",
    3.             url: '/index.php?r=controller-name/action-name',
    4.             data: {
    5.                 dir: dir
    6.             },
    7.             success: function(data){
    8.  
    9.                 $('.box').text('');
    10.                 $('.box').append(data);
    11.                 fontSizeAnim(0);
    12.                 if(anim == 0) {
    13.                     $('.box-elem').show();
    14.                 } else $('.box-elem').slideDown(800);
    15.             }
    16.         });
    А следующий уровень - не писать урлы вручную, а генерить через Url::to()
     
  24. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    месяц назад или чуть больше клиент нашелся)) говорит надо доделать магазин, программер делал-делал и пропал))
    смотрю на магазин - симпатично все.. через ajax обновляется.. косяки в верстке есть.. но я не фронтер))
    получаю доступ к телу))) а там ужас... там смесь js php html все одной портянкой.. намека на MVC нет)
    более того даже все на функции не раздроблено)) код во многих местах себя дублирует) без комментариев)) в общем мрак))
    видно горе программер сам запутался в своем коде и пропал))
     
  25. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    у меня было подобное. Я посоветовался с мудрым @mahmuzar и он сказал, что надо дробить на функции.
    Раздробил на кучу функций и до сих пор с удовольствием поддерживают этот проект)