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

Данные товара в Ajax


Recommended Posts

Всем привет! Пытаюсь вытянуть id товара через Ajax, размещаю вот такую дополнительную функцию в /catalog/controller/product/product.php :

 

function prod () {
  $json = array();
  $json['prod_id'] = (int)$this->request->get['product_id'];
  $this->response->addHeader('Content-Type: application/json');
  $this->response->setOutput(json_encode($json));
}

 

данных не отдаёт. Если разместить содержимое этой функции в index(), на страницу выведет id, но это всё, что он выведет, остального содержимого не будет. Эта функция должна отрабатывать при клике на элемент. Если вместо (int)$this->request->get['product_id'] вставить статическое значение '15', то при срабатывании события всё выведется. Получается, что  он не видит функцию (int)$this->request->get['product_id']. Не совсем понимаю принцип работы этих функций, кто в теме, подскажите, что я неправильно делаю и в каком направлении копать. Заранее спасибо!

Змінено користувачем romveld
Надіслати
Поділитися на інших сайтах


Где ваш запрос ajax???? Зачем вы размещаете функцию когда вам нужен метод...... Почему бы не подучить ПХП https://www.php.net/manual/en/book.classobj

вместо

function prod () {

не нужно ставить пробел между названием функции/метода и скобками ()

нужно наверно

public function prod() {

 

ну и url для запроса в ajax должен быть наверно такой

index.php?route=product/product/prod

 

32 минуты назад, romveld сказал:

$this->request->get['product_id']

а какой у вас тип запроса в ajax??? type

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

Если всё вместе, вот так:

 

/catalog/controller/product/product.php

 

public function prod() {
  $json = array();
  $json['prod_id'] = $this->request->get['product_id'];
  $this->response->addHeader('Content-Type: application/json');
  $this->response->setOutput(json_encode($json));
}

 

/risaler.ru/catalog/view/theme/default/js/common.js

 

var prodpopup = {
  'prod': function(prod_id) {
    $.ajax({
      url: 'index.php?route=/product/product/prod',
      type: 'post',
      data: prod_id,
      dataType: 'json',
      success: function(json) {
      	console.log(json['prod_id']);
      },
    });
  }
}

 

и на фортэнде

 

onclick="prodpopup.prod('64');"

 

 

Если в /catalog/controller/product/product.php сделать так:

 

public function prod() {
  if (isset($this->request->get['product_id'])) {
  	$product_id = (int)$this->request->get['product_id'];
  } else {
  	$product_id = 0;
  }
  $json = array();
  $json['prod_id'] = (int)$this->request->get['product_id'];;
  $this->response->addHeader('Content-Type: application/json');
  $this->response->setOutput(json_encode($json));
}

 

То 0 выведется, а вот метод $this->request->get['product_id']; не видит.

 

Может ерунду предположу, но не может ли это быть связано, с тем, что класс ControllerProductProduct, расширяет Controller, а так как у родительского класса метод prod не определён, то и данные тянуть неоткуда? Я правда понятия не имею где родительский Controller вообще описан и как он устроен.

 

Функция prod() на одном уровне с остальными:

image.png.5287b03862af7ec2f0de3d50a09a9274.png

Змінено користувачем romveld
Надіслати
Поділитися на інших сайтах


26 минут назад, romveld сказал:

request->get['product_id']; не видит.

Вы же вроде пост ждёте

27 минут назад, romveld сказал:

type: 'post',

 

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

29 минут назад, romveld сказал:

То 0 выведется, а вот метод $this->request->get['product_id']; не видит.

 

Может ерунду предположу, но не может ли это быть связано, с тем, что класс ControllerProductProduct, расширяет Controller, а так как у родительского класса метод prod не определён, то и данные тянуть неоткуда? Я правда понятия не имею где родительский Controller вообще описан и как он устроен.

 

 у вас тип запроса POST  

type: 'post'

а вы его получаете

$json['prod_id'] = (int)$this->request->get['product_id'];

 

тогда уж так

$json['prod_id'] = (int)$this->request->post['product_id'];

 

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

31 минуту назад, romveld сказал:

Может ерунду предположу, но не может ли это быть связано, с тем, что класс ControllerProductProduct, расширяет Controller, а так как у родительского класса метод prod не определён, то и данные тянуть неоткуда? Я правда понятия не имею где родительский Controller вообще описан и как он устроен.

чтоб не было таких дурацких предположений нужно хотяб почитать мануал, а не гадать. Дал же ссылку на мануал, вот и читаем что такое post/get запросы, что такое классы и методы, область видимости в функциях/методах и тд

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

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

И что-то всё равно не так:

1

image.png.95eead0fb72ed9defd5dac2ce02b924e.png

image.png.59825599986c4e8506b81ce075aff16c.png

 

 

2

image.png.4b387e84a2bbc7d5e69850b92a0bd0ce.png

image.png.89b39ea5f8b5546fda837e86f6e33264.png

 

ни один ни второй вариант не отрабатывают. Если с той проверкой, которая была  ранее, выводит 0.

 

ну так вы в data передаете неправильно значение

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

допустим передать через переменную

var dataStr = {prod_id: '4678'};

 

а в data указать

data: dataStr,

 

или так

data: {prod_id: '4678'},

 

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

var prodpopup = {
  'prod': function(product_id) {
    $.ajax({
      url: 'index.php?route=/product/product/prod',
      type: 'post',
      data: {prod_id: product_id},
      dataType: 'json',
      success: function(json) {
      	console.log(json['prod_id']);
      },
    });
  }
}

 

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

13 минут назад, romveld сказал:

Есть, вот так заработало:

А ещё бы заработало вот так прошлый раз:

$this->request->post['prod_id'];
Надіслати
Поділитися на інших сайтах

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

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

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

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

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

Вхід

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

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

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