Задать вопрос
@x_8ea282c0

Ajax + YII2 + Advanced = Error 404. Почему?

Всем добрый день!
Недавно пересел на YII2, весьма мощный инструмент... но есть проблемы которые которые я до конца не понимаю...
Смысл прост, жму кнопку, аякс стучится на контроллер и выдаёт результат. Реализация:
Ajax
$.ajax({
            url: "?r=site/getlistsliderfiles",
            data: {ajax: SourceInSlider},
            type: "POST",
            //dataType : "html",
            success: function(data) {
                alert(data);
            },
            error: function( xhr, status, errorThrown ) {
                alert("Что-то пошло не так. Попробуйте снова!");
            }
        });


Controller:
public function actionGetListSliderFiles()
    {
        $queryTerm = Yii::app()->request->get('ajax');
        Yii::$app->response->format = 'json';
        return ['ajax' => $queryTerm];
    }


В контроллере пробовал просто echo, пробовал if (Yii::app()->request->isAjax) { эхо например }, но ничего... F12 пишет что ошибка 404... как бы я не старался... вместо ajax пробовал post, менял типы данных передаваемых в контроллер...
Понял что сам YII2 не хочет чтобы js стучал в controller, прописал:
public function behaviors()
    {
        return [
            'access' => [
...
                    [
                        'actions' => ['logout', 'index', 'getlistsliderfiles'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
...
        ];
    }


Но нет... скажите, что я не так делаю... в basic всё работает... а Advanced сопротивляется(
  • Вопрос задан
  • 2187 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
Проверьте еще раз поле behaviors скорее всего стоит ограничение на тип запроса post, get.

Покажите ваши routes
Ответ написан
@lxShaDoWxl
не правильный вызов экшена если вы пишите экшен вида
actionGetListSliderFiles
то вызов экшена контроллера должен быть
site/get-list-slider-files

При первоначальной разработке напоролся на такую проблему
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@holfza
А если такой урл попробовать?
/index.php?r=site/getlistsliderfiles
Ответ написан
R0dger
@R0dger
Laravel/Yii/2 AngularJs PHP RESTful API
а CSRF передаете? если нет то попробуйте его отключить, а еще лучше просто передавать его!
Ответ написан
Тут два момента
1. Неверный урл в аякс-запросе. У вас написано "?r=site/getlistsliderfiles", надо "site/getlistsliderfiles". Ссылку на экшн лучше генерите через хелпер Url::to() в будущем это позволит вам избежать множества проблем.
2. Такое название экшена недопустимо. Нельзя использовать разный регистр. Правильно будет так: actionGetlistsliderfiles()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы