За последние 24 часа нас посетили 17436 программистов и 1712 роботов. Сейчас ищет 1601 программист ...

смена изображений и других параметров(характеристик продукта) при выборе цвета.

Тема в разделе "JavaScript и AJAX", создана пользователем AlexsaiL, 22 ноя 2017.

  1. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    Благодарю, попробую реализовать.
     
  2. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    @Maputo, Подскажите пожалуйста) извиняюсь что немного туплю, еще такой вопрос, на стороне сервера прописан вот такой код:
    PHP:
    1.       if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    2.             // Если к нам идёт Ajax запрос, то ловим его
    3.             echo 'Это ajax запрос!';
    4.             echo json_decode($_POST['massString']);
    5.  
    6.             exit;
    7.       }
    Сейчас хочу сгенерировать страницу html на сервере, из отобранного массива данных которые находятся в "massString" и потом через js отобразить их на странице, но не могу извлечь на стороне сервера прешедшие данные для работы с ними, подскажите как правильно это сделать?
     
  3. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    А что получается у Вас вот тут:
    PHP:
    1. echo json_decode($_POST['massString']);
    и в какой вид это надо привести?
     
  4. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    в консоли отображается массив, а мне надо на странице php получить этот массив, чтобы использую значения необходимых ключей, создать кусок кода html -страницы и вернуть его в место удаленного блока на странице.
     
  5. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @AlexsaiL, да. Я это понял. Тут важна конкретика. Как структурированы данные в массиве и как их надо расположить в html?
     
  6. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    Данные в виде ассоц массива, а в html хочу расположить подставляя нужные ключи массива, для отображения значения ключей, в таком виде:
    HTML:
    1. <span>'.$r['GROUP_NAME'].'</span>
     
  7. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @AlexsaiL, я делаю так:
    шаблон HTML(например файл item.html)
    HTML:
    1. <div class="%class_name%">
    2. <article><h3>%title%</h3>
    3. <img src="%src%" alt="%alt%" ...>
    4. ...
    5. </div>
    Массив
    PHP:
    1. $arr = ['class_name' => 'some_name',
    2.              'title' => 'Название товара',
    3.              'src' => 'http://..../12345678.jpg',
    4.              'alt' => 'товар черного цвета',
    5.              // и т.д.
    6. ];
    Далее читаю содержимое файла и заменяю все %метки% на данные из массива по ключам:
    PHP:
    1. $html = file_get_contents('абсолютный путь к файлу item.html');
    2. $html = preg_replace_callback('/%([a-z_]+)%/', function($matches) use ($arr)
    3. {
    4.     if(isset($arr[$matches[1]]))
    5.     {
    6.         return $arr[$matches[1]]);
    7.     }
    8.     return '';
    9. }, $html);
    10.  
    11. echo $html;
     
  8. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    @Maputo использую шаблонизатор, так что у меня все будет немного по другому, я как понимаю, массив $arr - это то, что пришло с js на сервер, но я не могу присвоить переменной, то что пришло с js, не получается.
     
  9. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Можете показать, что выводится в таком случае:
    PHP:
    1. var_dump(json_decode($_POST['massString']));
     
  10. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    NULL
     
  11. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
  12. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    приходит:
    PHP:
    1. array(1) { ["mass"]=> string(2522) "{"ID":"902","ID_PRODUCT":"902","NAME":"S444 White","PICTURE":"\r\n\r\n
    2. \r\n    Камера
    3. 5 Мп    \r\n    4 ядра
    4. 1.3 ГГц        4,0\"
    5. \r\n
    6.    2 SIM-
    7. карты        1500
    8. мАч        Android 5.1
    9. \r\n
    10. ","ARCHIVE":"3","GROUP_NAME":"Смартфон","COLOR":"#fff","picture":[{"big":"s444_ch_1.jpg","huge":"huge/h_s444_ch_1.jpg"},{"big":"s444_ch_2.jpg","huge":"huge/h_s444_ch_2.jpg"},{"big":"s444_ch_3.jpg","huge":"huge/h_s444_ch_3.jpg"},{"big":"s444_ch_4.jpg","huge":"huge/h_s444_ch_4.jpg"}],"VALUE_RUS":"
    11. 4.0\" TN (800x480) дисплей\r\n
    12. 5 Мп Камера (фронтальная 1,3 Мп)\r\n
    13. 512 МБ оперативной памяти\r\n
    14. 4 ГБ встроенной памяти\r\n
    15. Android 5.1 Операционная система",}" }
     
  13. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
  14. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @AlexsaiL, о чем я и предупреждал.
    Согласуйте имя передаваемого параметра.
    А то получается странное - посылаете к бабушке Ваню, а перезвонив ей - спрашиваете, не пришёл ли к ней Петя...
     
    AlexsaiL нравится это.
  15. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    PHP:
    1. object(stdClass)#8 (18) { ["ID"]=> string(3) "902" ["ID_PRODUCT"]=> string(3) "902" ["NAME"]=> string(15) "S444
    я вместо $_POST['mass'] прописал $_POST['massString'], не внимательно написал код.
     
  16. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Еще попробуйте так:
    PHP:
    1. $arr = json_decode($_POST['mass'], true);
    2. var_dump($arr);
     
    AlexsaiL нравится это.
  17. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    Так уже пришло массивом
    PHP:
    1. array(18) { ["ID"]=> string(3) "902" ["ID_PRODUCT"]=> string(3) "902" ["NAME"]=> string(15) "S444
     
    Maputo нравится это.
  18. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    @Maputo Приветсвую!) Подскажите пожалуйста). Снова вопрос возник. Дописал в общем подгружаемый контент, то есть при клике по цвету, отображается другой нужный контент с нужным цветом продукта(т.е. на странице продукта он по клику взял id в ajax сравнил его со значением, и вернул массив родителя в котором он находится, все отработало, все хорошо, но если на подгруженном контенте кликнуть на выбор следующего другого цвета, то он мне перезагружает страницу) получается что он не находит на главной странице массив в котором проходит отбор по значению, и ему нечего вернуть и он перегружает страницу? или в каких случаях он может перезагрузить страницу?
     
  19. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @AlexsaiL, значит у Вас в первом случае на кнопке был обработчик события, который отсылал через аякс данные, а для нового контента получилась просто ссылка. Сравните полученный html с исходным (кнопки с цветом).
     
  20. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    первая ссылка(отправляет в ajax):
    HTML:
    1. <a href="" class="colorImgs individOnClick" id="{$item['ID_PRODUCT']}"><span style="background-color: {$item['COLOR']};"></span></a>
    а это которая находится в подгружаемом контенте:
    HTML:
    1. echo '<a href="" class="colorImgs individOnClick" id="'.$item['L_10_IDH_1'].'"><span style="background-color: '.$item['COLOR'].';"></span></a>';
    Идентификаторы подставляются одинаковые, цвет соответсвенно.
    --- Добавлено ---
    @Maputo в js прописано
    Код (Javascript):
    1. $(".individOnClick").click(function (event){
    2.         event.preventDefault();
    при клике отменяю событие ссылки
     
  21. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @AlexsaiL, получается, что обработчик у Вас в js цепляется по одному из имени классов - его еще раз надо прицепить после вставки нового содержимого
    --- Добавлено ---
    Аякс в этом же обработчике?
     
  22. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    Один обработчик и один Аякс.
    --- Добавлено ---
    Аякс внутри этого обработчика.
     
  23. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Тогда после вставки надо проиграть подобный код:
    Код (Javascript):
    1. $(".individOnClick").off('click').click(function (event){
    2. ... // и все что далее до конца кода обработчика
     
  24. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    После вставки: $('.individAppendJs').html(data); в самом success?
     
  25. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Да после вставки, но чтобы не перегружать код - его лучше прописать одной функцией и ее вызвать. Я так понимаю там рекурсия получится.