Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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');
            }
        });
    }

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

Надіслати
Поділитися на інших сайтах


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
Надіслати
Поділитися на інших сайтах

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
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.