Не выполняется скрипт

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
GUF
Сообщения: 10
Зарегистрирован: 2015.05.21, 13:37

Не выполняется скрипт

Сообщение GUF »

Добрый день, помогите новичку разобраться...
Хотел сделать автозаполнение при вводе пользователя, столкнулся с проблемой что скрипт php для генерации массива подсказок не срабатывает.
Вместо этого возвращается та же страница в ответе... Посмотрел в firebug. Не запускается даже тест, то ли он его не находит, то ли не хочет выполнять...

Текст sauto.php файла:

Код: Выделить всё

<?php
datas = array("alpaca", "buffalo", "cat", "tiger");
$s = "[".implode(",", $datas)."]";
echo $s;
exit;
?>
Текст вызова:

Код: Выделить всё

  $("#search_for_hint").autocomplete({source:"sauto.php", minLength:2}); 
Запрос формируется вроде как верно(firebug):

GET http://localhost/frontend/web/sauto.php?term=df

Но тело ответа - это исходная страница сайта... а не массив...

Как правильно вызывать скрипт?
unclead
Сообщения: 160
Зарегистрирован: 2015.03.13, 19:44

Re: Не выполняется скрипт

Сообщение unclead »

Создайте контроллер с экшеном, который возвращает нужные данные, а в js пропишите URL до этого экшена.
Зачем для этих целей создавать отдельный скрипт?
GUF
Сообщения: 10
Зарегистрирован: 2015.05.21, 13:37

Re: Не выполняется скрипт

Сообщение GUF »

Просто, потому что делал по примеру(причем все почти так пишут). Посмотрю вариант через контроллер, то есть напрямую скрипт не вызвать никак?
GUF
Сообщения: 10
Зарегистрирован: 2015.05.21, 13:37

Re: Не выполняется скрипт

Сообщение GUF »

Можно попросить пример набросок как это сделать ?
Аватара пользователя
PaSiS
Сообщения: 88
Зарегистрирован: 2011.11.15, 18:07
Контактная информация:

Re: Не выполняется скрипт

Сообщение PaSiS »

GUF писал(а):Можно попросить пример набросок как это сделать ?
Если нужен набросок как сделать экшн контроллера, то это в руководство вам надо.
GUF
Сообщения: 10
Зарегистрирован: 2015.05.21, 13:37

Re: Не выполняется скрипт

Сообщение GUF »

Да, конечно делал по этому примеру, но результат тот же...
Добавил в контроллер сайта Action, пытаюсь вызвать - та же история, генерит страницу:

Код: Выделить всё

   public function actionGetServices($term)
    {
        $datas = array("alpaca", "buffalo", "cat", "tiger");
        var $s = "[".implode(",", $datas)."]";
        echo $s;
        return $s;

    } 
Вызов:

Код: Выделить всё

$("#search_for_hint").autocomplete({source:"/site/GetServices", minLength:2
Результат:
GET http://localhost/site/GetServices?term=efes
- хтмл страницы...
Аватара пользователя
PaSiS
Сообщения: 88
Зарегистрирован: 2011.11.15, 18:07
Контактная информация:

Re: Не выполняется скрипт

Сообщение PaSiS »

Код: Выделить всё

$("#search_for_hint").autocomplete({source:"/site/GetServices", minLength:2
замените на

Код: Выделить всё

$("#search_for_hint").autocomplete({source:"/site/get-services", minLength:2
И либо укажите в экшене $layout = null;, либо используйте renderAjax/renderPartial
GUF
Сообщения: 10
Зарегистрирован: 2015.05.21, 13:37

Re: Не выполняется скрипт

Сообщение GUF »

Все что предложили попробовал, но изменений нет - в ответ на GET - html страницы отдает. Но спасибо! Теперь хоть синтаксис функции проверяется)

Код: Выделить всё

 $("#search_for_hint").autocomplete({source:"/site/get-services", minLength:2}); 

Код: Выделить всё

    public function actionGetServices($term)
    {
        $this->$layout = null;
        $datas = array("alpaca", "buffalo", "cat", "tiger");
        $s = "[".implode(",", $datas)."]";
        echo $s;
        return $this->render('index', $datas);
      //  return $s;

    }
unclead
Сообщения: 160
Зарегистрирован: 2015.03.13, 19:44

Re: Не выполняется скрипт

Сообщение unclead »

Если вы используете Jquery Autocomplete то в качестве source от сервера скорее всего должен прилетать Json, а не массив.
В этом случае, вам следует использовать такой экшен

Код: Выделить всё


use yii\web\Response;

...

public function actionGetServices($term)
    {
        $this->$layout = null;
        $datas = array("alpaca", "buffalo", "cat", "tiger");
        Yii::$app->response->format = Response::FORMAT_JSON;
        return $datas;
    }
 
Приведите пример на мануал по которому вы все настраиваете
unclead
Сообщения: 160
Зарегистрирован: 2015.03.13, 19:44

Re: Не выполняется скрипт

Сообщение unclead »

либо используйте renderAjax/renderPartial
зачем тут вообще возвращать View, если просто требуется вернуть данные для авто-подстановки.
Аватара пользователя
PaSiS
Сообщения: 88
Зарегистрирован: 2011.11.15, 18:07
Контактная информация:

Re: Не выполняется скрипт

Сообщение PaSiS »

unclead писал(а):
либо используйте renderAjax/renderPartial
зачем тут вообще возвращать View, если просто требуется вернуть данные для авто-подстановки.
Давно с автоподстановкой не работал, так, да, можно обойтись Yii::$app->response->format = 'json' и вернуть массив
GUF
Сообщения: 10
Зарегистрирован: 2015.05.21, 13:37

Re: Не выполняется скрипт

Сообщение GUF »

Использую стандартный jquery autocomplete, подключаю:

Код: Выделить всё

    <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
    <script src="//code.jquery.com/jquery-1.11.2.js"></script>
    <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
Если в качестве source передавать массив(как в примере с офсайта) , то работает. Но мне нужно будет подсказки формировать из БД.
Поэтому надо формировать данные в скрипте и нужен ajax. В всех примерах, которые смотрел source задается файл php. Но с yii2 это не прокатывает. Скрипт просто не выполняется.

По совету перенес вызов в контроллер в action. При вызове, если, например, там сделать ошибку - выдает ошибку. То есть функция вроде как вызывается. Но чтобы я не возвращал - результата нет...
Найти пример как это сделано в yii2 я тоже не смог...

Все примеры с сайта jquery смотрел и простые пробовал: http://jqueryui.com/autocomplete/#multiple-remote

Но пока не получается получить автоподсказку, данные в json , в массиве и как угодно не передаются будто бы... а генерится хтмл страницы.
unclead
Сообщения: 160
Зарегистрирован: 2015.03.13, 19:44

Re: Не выполняется скрипт

Сообщение unclead »

по-умолчанию action отдает html. Не важно какой контент вы отдаете. Чтобы ответ был в формате json, надо явно указать это, например, как я привел в примере выше
Yii::$app->response->format = Response::FORMAT_JSON;
GUF
Сообщения: 10
Зарегистрирован: 2015.05.21, 13:37

Re: Не выполняется скрипт

Сообщение GUF »

Да,конечно, я пробовал вариант предложенный вами. Но результат не изменился, мне кажется нужно еще что то настроить. Как можно еще проверить action и то что он возвращает? или в firebug все верно выводит , что есть...
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Не выполняется скрипт

Сообщение zelenin »

GUF писал(а):Да,конечно, я пробовал вариант предложенный вами.
уверены? потому что в примере ошибка, о которой вы не сказали, а я не уверен, что вы могли бы ее самостоятельно сиправить.
unclead
Сообщения: 160
Зарегистрирован: 2015.03.13, 19:44

Re: Не выполняется скрипт

Сообщение unclead »

Сделал все как и описывал на базовом приложении и все работает за исключением одного момента - я подключаю autocomplete через yii2-jui

Добавил в composer.json

Код: Выделить всё

"yiisoft/yii2-jui":"*"
далее во View

Код: Выделить всё

   <?= \yii\jui\AutoComplete::widget([
        'name' => 'search_for_hint',
        'clientOptions' => [
            'source' => '/site/get-services',
            'minLenght' => 2
        ]
    ])?>
В constroller

Код: Выделить всё

    public function actionGetServices($term)
    {
        $data = array("alpaca", "buffalo", "cat", "tiger");
        Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
        return $data;
    }
Авоподстановка работает, экшен отдает json: http://prntscr.com/78bjdq

Важно у вас должны быть включены красивые урлы. http://www.yiiframework.com/doc-2.0/gui ... retty-urls

иначе в js надо прописывать
'source' => yii\helpers\Url::to(['site/get-services']),
@zelenin
потому что в примере ошибка, о которой вы не сказали,
где ошибка, если не секрет
GUF
Сообщения: 10
Зарегистрирован: 2015.05.21, 13:37

Re: Не выполняется скрипт

Сообщение GUF »

Спасибо! Помучился , но с jui autocomplete получилось! Самое странное, что не смотря на то , что красивые урлы в настройках включены , пока не написал через urlTo - не работало... Пока не знаю, в чем может быть причина. Да, и странно почему стандартный автокомплит не работает...
GUF
Сообщения: 10
Зарегистрирован: 2015.05.21, 13:37

Re: Не выполняется скрипт

Сообщение GUF »

Как в JS правильно прописать source, если не работают красивые ссылки? То есть на пхп это выглядит как 'source' => yii\helpers\Url::to(['site/get-services']). А для JS изначально как autocomplete({source: '/site/get-services'. Как можно поправить?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Не выполняется скрипт

Сообщение zelenin »

GUF писал(а):Как в JS правильно прописать source, если не работают красивые ссылки? То есть на пхп это выглядит как 'source' => yii\helpers\Url::to(['site/get-services']). А для JS изначально как autocomplete({source: '/site/get-services'. Как можно поправить?
на php генерите
GUF
Сообщения: 10
Зарегистрирован: 2015.05.21, 13:37

Re: Не выполняется скрипт

Сообщение GUF »

Как переписать с JS

Код: Выделить всё

 $("#search_for_hint").autocomplete({source: '/site/get-services', minLength:2});  
на php для страницы хтмл ?
Ответить