Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

AJAX получение шаблона.


 Поделиться

Рекомендованные сообщения

ocStore v2.3.0.2.4

Товарищи, приветствую! Пишу модуль в админке, имею контроллер, который загружает основной шаблон. Этот шаблон использую JQ и AJAX обращается к серверу, ожидая, что тот выполнит метод, описанный в контроллере. Этот метод, в свою очередь,  выполняет некоторые манипуляции с данными, потом передаёт их второму шаблону (tpl) и тот уже должен выводиться: 

public function method() {
    if ($this->request->server['REQUEST_METHOD'] == 'POST') {
        //code...
        $this->response->addHeader('Content-Type: html');
	$this->response->setOutput($this->load->view('controller/template', $data));
    }
}

AJAX запрос отправляется, и возвращается ответ с кодом 200, в виде html "Страница не найдена". В итоге AJAX стучится в .../admin/index.php?route=controller/file/method&token=... но когда я перехожу по этому адресу, так же вижу сообщение "Страница не найдена". Запрос такой: 

    function getPerms(url) {
        $.ajax({
            url: url,
            method: 'POST',
            dataType: 'html',
            brforeSend: function(){
                $('.panel-title>i').replaceWith('<i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i>');
            },
            complete: function(){
                $('.panel-title>i').replaceWith('<i class="fa fa-table" aria-hidden="true"></i>');
                console.log('complete');
                console.log(url);
            },
            success: function(data){
                $('#upp-table').html(data);
                console.log(data);
            },
            error: function(){
                console.log('error');
            }
        });
    }

Как правильно обратиться к методу, что бы получить его ответ (готовый шаблон)?
 

Ссылка на комментарий
Поделиться на других сайтах


Посмотрите хотя бы базовые способы jquery ajax-запросов. Вы его отправляете пустой в никуда.

Ссылка на комментарий
Поделиться на других сайтах


9 минут назад, Shureg сказал:

Посмотрите хотя бы базовые способы jquery ajax-запросов. Вы его отправляете пустой в никуда.

Ну допустим я к запросу добавляю data: 'test', но от этого ничего не меняется. Что конкретно не так с запросом? Как сделать что бы он отправлялся "в куда"? :)

Ссылка на комментарий
Поделиться на других сайтах


1 минуту назад, Panda58dev сказал:

Ну допустим я к запросу добавляю data: 'test', но от этого ничего не меняется. Что конкретно не так с запросом? Как сделать что бы он отправлялся "в куда"? :)

Неужели вас в гугле забанили? Ну есть же куча примеров ajax запросов, хоть один гляньте. Куда вы его отправляете? 

url: url,
Ссылка на комментарий
Поделиться на других сайтах


1 минуту назад, Shureg сказал:

Неужели вас в гугле забанили?

Слава богу - нет :)
В приложенном коде видно, что запрос отправляет функция getPerms() которая принимает один единственный параметр - url адрес. Адрес по которому отправляется запрос я тоже описал: .../admin/index.php?route=controller/file/method&token=... 
Если у Вас есть ещё предположения, сильно прошу их высказать! 

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах


1 минуту назад, Panda58dev сказал:

Адрес по которому отправляется запрос я тоже описал: 

Адрес, по которому отправляет данные приведённый  вами код запроса -  'url'. 
Если ваш реальный код другой, копируйте его, а не загадывайте ребусы.

Ссылка на комментарий
Поделиться на других сайтах


Ну во первых, token в URL желательно подмешивать непосредственно уже в запросе 
 

url: url + '&token=<?php echo $token; ?>',

В самом контроллере все верно, но нужно еще обьявить в контроллере который рендерит шаблон где Вы вызываете метод getPerms

$data['token'] = $this->session->data['token'];

При передаче аргумента url в js скорее всего знак & заменяется на &amp;
из-за этого и выдает ошибку

 

А еще следует убрать строку 

$this->response->addHeader('Content-Type: html');

И если method это публичный метод и Вы не передаете в него никаких данных, то используйте метод GET вместо POST

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

48 минут назад, Panda58dev сказал:

/admin/index.php?route=controller/file/method

У вас файл точно лежит в директории /admin/controller/controller/   ?

Ссылка на комментарий
Поделиться на других сайтах


2 минуты назад, Shureg сказал:

Если ваш реальный код другой, копируйте его, а не загадывайте ребусы.

Окей, с запросом разобрался, оказывается проблема и правда была в url: контроллер, метод index(), в нём подключаю js файл и передаю в шаблон url:

$this->document->addScript('view/javascript/users_perm_plus/users_perm_plus.js');
$data['getPerms'] = $this->url->link('user/user_permission/getPerms', 'token=' . $this->session->data['token'] . $url, true);

Тут-то и вся проблема - указал не тот контроллер )

Но теперь другая проблема есть: кидает вот такую ошибку:

image.thumb.png.5423636fb36c8d22fa7b71a06d9bf41b.png

Ссылка на комментарий
Поделиться на других сайтах


1 минуту назад, Shureg сказал:

У вас файл точно лежит в директории /admin/controller/controller/   

Точно, основной шаблон и метод index загружаются

Ссылка на комментарий
Поделиться на других сайтах


1 годину назад, Shureg сказав:

У вас файл точно лежит в директории /admin/controller/controller/   ?

ну назвал человек папку controller и положил он ее в controller что тут такого :grin:

Ссылка на комментарий
Поделиться на других сайтах

1 годину назад, Panda58dev сказав:

Окей, с запросом разобрался, оказывается проблема и правда была в url: контроллер, метод index(), в нём подключаю js файл и передаю в шаблон url:


$this->document->addScript('view/javascript/users_perm_plus/users_perm_plus.js');
$data['getPerms'] = $this->url->link('user/user_permission/getPerms', 'token=' . $this->session->data['token'] . $url, true);

Тут-то и вся проблема - указал не тот контроллер )

Но теперь другая проблема есть: кидает вот такую ошибку:

image.thumb.png.5423636fb36c8d22fa7b71a06d9bf41b.png

не видит метода getPerms в users_perm_plus.php

Ссылка на комментарий
Поделиться на других сайтах

@ocdev_pro помог и всё разъяснил, с AJAX проблем не было, просто я обращался к методу модели, которого не было. Всем спасибо! 

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.