volego
@volego
эникей/web-программист

Yii2 + jquery: почему после приема getJSON перебрасывает на страницу запроса?

Добрый день!
Не могу победить проблему :( Есть задача: через js-таймер опрашивать сервер и в зависимости от получаемых данных производить манипуляции с элементами на странице.

в подключаемом через assets js-файле есть код:
var timerId = setTimeout(function tick() {
        var url =  location.protocol + "//" + location.host+"/waiter/locations/statuses?restaurant_id="+$(".ServiceLocations").attr('data-restaurant-id');
        $.getJSON(url, function(data) {
            // мой код обработки полученных данных            
        });
        timerId = setTimeout(tick, 1000);
    }, 1000);

Данный код запрашивает данные, которые отдает экшн statuses контроллера locations модуля waiter:
...
public function actionStatuses()
    {
        Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
        $data = ['id'=>2,'text'=>'zzz']; // примерный массив данных
        return $data;
    }
...

В итоге, как только вызывается $.getJSON , страница перезагружается на адрес url и я вижу просто массив данных. Почему меня редиректит на страницу запроса?
  • Вопрос задан
  • 39 просмотров
Решения вопроса 1
volego
@volego Автор вопроса
эникей/web-программист
Всем спасибо, проблема решилась, при переносе функции обновления из подключаемого JS-файла во view:
$url = Url::to(['locations/statuses', 'restaurant_id' => $restaurant->id]);
    $script = <<< JS
        var timerId = setTimeout(function tick() {
        $.getJSON('$url', function(data) {
            data.forEach(function(item){
                //обработка массива полученных данных
            });
        });
        timerId = setTimeout(tick, 1000);
    }, 1000);
JS;
    $this->registerJs($script, yii\web\View::POS_READY);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@nvdfxx
Senior Pomidor developer
return false в конец таймера
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы