Использование Ajax при работе с контроллером

Тема в разделе "Общие вопросы", создана пользователем AndrewAndrew, 20 окт 2022.

  1. AndrewAndrew

    AndrewAndrew Новичок

    Сообщения:
    13
    Симпатии:
    0
    Доброе утро, совсем новичок в OC. Проблема заключается в следующем. Как правильно организовать обмен данными между шаблоном и php файлом. Без использования Ajax все работает превосходно и верно, но при использовании скрипта в ответ тишина.
    Пример
    class ControllerTestTest extends Controller {
    public function index() {
    //
    if (isset($this->response->post['name'])) {

    }

    }
    }

    public function exchange ()
    {
    $name = $this->request->post['name'];
    } else {
    $name = '';
    }

    $json = array();
    // $this->load->model('extension/module/news');
    $json['message'] ="Here we go";
    $json['name'] = $name;
    //$json['message'] = $this->model_extension_module_news->addNews($this->request->post);
    //$this->log->write($name);
    $this->response->addHeader('Content-Type: application/json');
    $this->response->setOutput(json_encode($json));


    }
    $('#my_form_email').submit(function (event) {
    event.preventDefault();
    var $form = $(this),
    formAction = $form.attr('action'),
    formData = $form.serialize();

    //Отпраляем вопрос пользователя
    $.ajax({
    url: 'index.php?route=test/test/exchange',
    type: 'POST',
    data: formData,
    dataType: 'json',
    success: function (json) { //callback на случай ус
    }
    Правильно ли указан url к методу контроллера? И как обработать полученные данные
     
  2. Blast

    Blast Продвинутый пользователь

    Сообщения:
    212
    Симпатии:
    74
    метод exchange написан за пределами класса
     
    AndrewAndrew нравится это.
  3. AndrewAndrew

    AndrewAndrew Новичок

    Сообщения:
    13
    Симпатии:
    0
    нет. Метод в классе контроллера. Просто листинг коряво привел, сорри.
     
  4. Blast

    Blast Продвинутый пользователь

    Сообщения:
    212
    Симпатии:
    74
    тогда открывайте инструменты разработчика, вкладка Network (Сеть) и смотрите по фильтру XHR какие запросы уходят на сервер, с какими данными, какой ответ там.
    в вашем коде нет никакой обработки ответа. может он нормальный и данные приходят, просто вы с ними ничего не делаете
     
    AndrewAndrew нравится это.
  5. AndrewAndrew

    AndrewAndrew Новичок

    Сообщения:
    13
    Симпатии:
    0
    Спасибо за подсказку
     
  6. AndrewAndrew

    AndrewAndrew Новичок

    Сообщения:
    13
    Симпатии:
    0
    спасибо еще раз. Заработало - подправил данные в ответе контроллера.
     
  7. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    741
    Симпатии:
    100
    Как говорится, добавлю свои 5 копеек.

    Строка: $this->response->addHeader('Content-Type: application/json'); Не нужна, хотя и корректно добавлять такой заголовок.

    Обычной строки $this->response->setOutput(json_encode($json)); более чем достаточно.
     
    AndrewAndrew нравится это.
  8. AndrewAndrew

    AndrewAndrew Новичок

    Сообщения:
    13
    Симпатии:
    0
     
  9. AndrewAndrew

    AndrewAndrew Новичок

    Сообщения:
    13
    Симпатии:
    0
    лучше добавить
     
  10. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    741
    Симпатии:
    100
    В крайнем случае всегда можно написать свой метод setJSONOutput.
     
  11. NTKU

    NTKU Новичок

    Сообщения:
    14
    Симпатии:
    0
    Здравствуйте. У меня вопрос, вроде по теме:
    В модуле доставки есть массив. Как его отправить в браузеный скрипт через Ajax??
     
  12. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    741
    Симпатии:
    100
    К примеру так

    $json = array(.........);
    $this->response->setOutput(json_encode($json));
     
  13. NTKU

    NTKU Новичок

    Сообщения:
    14
    Симпатии:
    0
    Это я уже видел где-то в Яндексе. Но не могу понять, что такое response? И, что такое setOutput? И где они прячутся? Может их у меня нет, тогда где сделать? и Как? Мне кажется, что я уже весь опенкарт носом перепахал, но это прошло мимо.
     
  14. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    741
    Симпатии:
    100
    Ну это в контроллерах опенкарта - стандартный вывод данных. Может вам проще будет кого-то попросить сделать то, что вам нужно, в рамках фриланса?
     
  15. NTKU

    NTKU Новичок

    Сообщения:
    14
    Симпатии:
    0
    Решил сохранить массив в сессию, а потом через контроллер забирать. В файле:

    $_SESSION["myArray"] = json_encode($array);

    в контроллере
    public function Json()
    {

    $data = $this->session->myArray;
    echo $data;

    }
    Запрашивать буду по ссылке: index.php?route=extension/shipping/myname/Json

    Буду завтра пробовать.
    Может уже кто-то знает, где ошибся?
     
  16. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    741
    Симпатии:
    100
    Вместо

    echo $data;

    Сделайте

    $this->response->setOutput($data);

    Раз у вас уже там json_encode($array);

    П.С. Подправил мелочи в коде