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

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

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

  1. AlexsaiL

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

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    В общем выявил я причину синтаксической ошибки, ругался сам шаблонизатор на фигурные скобки- "}" фигурные скобки конфликтуют с синтаксисом разделителей, применил тег шаблонизатора {literal}{/literal}, синтаксическая ошибка пропала, но на сервере все таки не поймал переменную.
     
  2. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @AlexsaiL, Нужно исключать все возможные и невозможные варианты. Сможете ли Вы поймать на сервере данные отправленные в виде числа?
    Код (Javascript):
    1. ...
    2. url: ...,
    3. data: 123,
    4. ...
     
  3. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Надеюсь Вы догадались, где я ошибся.
    Код (Javascript):
    1. data: {abc: 123},
     
    AlexsaiL нравится это.
  4. AlexsaiL

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

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    заметил ошибку. В общем написал такой код:
    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.             foreach($_POST as $name => $val) {
    5.                   echo  $name . ' = ' . $val . '<br>';
    6.             }
    7.             exit;
    8.       }
    9.       //Если это не ajax запрос
    10.       echo 'Это не ajax запрос!';
    В консоли отображается :Это ajax запрос! num = 123<br>
    Заменил на ассоц.массив= в консоли отобразились данные что массив прилетел.
     
  5. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @AlexsaiL, значит дело в данных, если все остальное работает.
    Какое содержимое в переменной massString?
     
  6. AlexsaiL

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

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    строковое передаю
    var mass = find(obj, idClick);
    var massString = JSON.stringify(mass[0]);
     
  7. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    А привести пример можете содержимого?
    Код (Javascript):
    1. console.log(massString);
     
  8. AlexsaiL

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

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    Код (Javascript):
    1. [{"ID":"900","ID_PRODUCT":"900","NAME":"s444 Black","ARCHIVE":"3","GROUP_NAME":"Смартфон","COMMENTS":"hot.png","COLOR":"#000","picture":[{"big":"b_s444_b_1.jpg","huge":"huge/h_s444_b_1.jpg"},{"big":"b_s444_b_2.jpg","huge":"huge/h_s444_b_2.jpg"},{"big":"b_s444_b_3.jpg","huge":"huge/h_s444_b_3.jpg"},{"big":"b_s444_b_4.jpg","huge":"huge/h_s444_b_4.jpg"}],"VALUE_RUS":"<li> 4.0\" TN (800x480) дисплей\r\n<li> 5 Мп Камера (фронтальная 1,3 Мп)\r\n<li> 512 МБ оперативной памяти\r\n<li> 4 ГБ встроенной памяти\r\n<li> Android 5.1 Операционная система"},"900"]
    --- Добавлено ---@Maputo подскажите, мне необходимо эту строку на стороне сервера преобразовать в массив?
     
  9. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @AlexsaiL, это массив. У меня при отправке показывает:
    Код (Text):
    1. array(1) {
    2.   ["undefined"]=>
    3.   string(0) ""
    4. }
    Там у Вас два элемента. Если преобразовать к виду json
    Код (Javascript):
    1. {aaa:{"ID":"900","ID_PRODUCT":"900","NAME":"s444 Black","ARCHIVE":"3","GROUP_NAME":"Смартфон","COMMENTS":"hot.png","COLOR":"#000","picture":[{"big":"b_s444_b_1.jpg","huge":"huge/h_s444_b_1.jpg"},{"big":"b_s444_b_2.jpg","huge":"huge/h_s444_b_2.jpg"},{"big":"b_s444_b_3.jpg","huge":"huge/h_s444_b_3.jpg"},{"big":"b_s444_b_4.jpg","huge":"huge/h_s444_b_4.jpg"}],"VALUE_RUS":"<li> 4.0\" TN (800x480) дисплей\r\n<li> 5 Мп Камера (фронтальная 1,3 Мп)\r\n<li> 512 МБ оперативной памяти\r\n<li> 4 ГБ встроенной памяти\r\n<li> Android 5.1 Операционная система"},bbb:"900"}
    То приходит так:
    Код (Text):
    1. array(2) {
    2.   ["aaa"]=>
    3.   array(9) {
    4.     ["ID"]=>
    5.     string(3) "900"
    6.     ["ID_PRODUCT"]=>
    7.     string(3) "900"
    8.     ["NAME"]=>
    9.     string(10) "s444 Black"
    10.     ["ARCHIVE"]=>
    11.     string(1) "3"
    12.     ["GROUP_NAME"]=>
    13.     string(16) "Смартфон"
    14.     ["COMMENTS"]=>
    15.     string(7) "hot.png"
    16.     ["COLOR"]=>
    17.     string(4) "#000"
    18.     ["picture"]=>
    19.     array(4) {
    20.       [0]=>
    21.       array(2) {
    22.         ["big"]=>
    23.         string(14) "b_s444_b_1.jpg"
    24.         ["huge"]=>
    25.         string(19) "huge/h_s444_b_1.jpg"
    26.       }
    27.       [1]=>
    28.       array(2) {
    29.         ["big"]=>
    30.         string(14) "b_s444_b_2.jpg"
    31.         ["huge"]=>
    32.         string(19) "huge/h_s444_b_2.jpg"
    33.       }
    34.       [2]=>
    35.       array(2) {
    36.         ["big"]=>
    37.         string(14) "b_s444_b_3.jpg"
    38.         ["huge"]=>
    39.         string(19) "huge/h_s444_b_3.jpg"
    40.       }
    41.       [3]=>
    42.       array(2) {
    43.         ["big"]=>
    44.         string(14) "b_s444_b_4.jpg"
    45.         ["huge"]=>
    46.         string(19) "huge/h_s444_b_4.jpg"
    47.       }
    48.     }
    49.     ["VALUE_RUS"]=>
    50.     string(253) "<li> 4.0" TN (800x480) дисплей
    51. <li> 5 Мп Камера (фронтальная 1,3 Мп)
    52. <li> 512 МБ оперативной памяти
    53. <li> 4 ГБ встроенной памяти
    54. <li> Android 5.1 Операционная система"
    55.   }
    56.   ["bbb"]=>
    57.   string(3) "900"
    58. }
    Может надо так сделать:
    Код (Javascript):
    1. var massString = JSON.stringify(mass[0][0]);
     
    #34 Maputo, 27 ноя 2017
    Последнее редактирование: 27 ноя 2017
  10. AlexsaiL

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

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    @Maputo если прописать ключ [0]
    Код (Javascript):
    1. var massString = JSON.stringify(mass[0]);
    то беру только первый необходимый массив, второй эллемент мне не нужен.
    --- Добавлено ---
    @Maputo прописал
    Код (Javascript):
    1. console.log(typeof massString);
    в консоли отобразило: string
     
  11. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Это в любом случае будет строка. Просто при конвертации в post-запрос из массива получается не то, что Вы ожидаете. Попробуйте с двумя нулями. Второй элемент массива - просто число 900, которое, наверняка у Вас в данных уже присутствует.
     
    AlexsaiL нравится это.
  12. AlexsaiL

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

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    idClick - это и есть 900 id- продукта
    Код (Javascript):
    1. var mass = find(obj, idClick);
    --- Добавлено ---
    С Двумя нулями приходит: undefined
     
  13. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Вобщем вот в таком виде у меня приходят все данные в виде строки
    Код (Javascript):
    1. data: {data: massString}
     
    AlexsaiL нравится это.
  14. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @AlexsaiL, может я чего-то недопонял, но stringify возвращает json-представление массива.
    Чтобы его обработать в php - нужна функция json_decode...
    --- Добавлено ---
    и ранее я об этом вроде упоминал :)
     
  15. AlexsaiL

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

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    вот таким образом:
    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.            $rsProduct_color = json_decode($_POST['mass']);
    5.            
    6.             exit;
    7.       }
    --- Добавлено ---
    Я где-то допустил ошибку и не дописал код?
     
  16. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @AlexsaiL, чудненько. Только теперь осталось индекс элемента массива $_POST правильный подобрать.
    Тот, что перед двоеточием пишите в передаваемом js объекте...
     
  17. AlexsaiL

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

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    не до конца вас понял...
    --- Добавлено ---
    вы имели ввиду так?:
    Код (Javascript):
    1. data:  {mass : mass},
     
  18. AlexsaiL

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

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

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @AlexsaiL, не совсем понятна задача. Но скорее всего ее можно сделать так же как и при начальном получении значения в mass. Я так понял Вам нужна теперь обратная операция? Из json в html?
     
  20. AlexsaiL

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

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    Мне необходимо, данные из полученного массива, вывести на странице вместо предыдущих. Если на сайте были фото на продукта белого цвета и цена другая, а в пришедшем массиве имеется черный цвет, заменить фото и цену у продукта на полученные данные без перезагрузки страницы.
     
  21. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Я в таких случаях создаю конструктор, который будет разбирать данные и по ним создавать целиком объект (DOM-элемент). А потом просто готовый объект заменяет старое содержимое.
    Чтобы создать такой конструктор - надо перед глазами иметь код html того участка, который заменяется.
     
  22. AlexsaiL

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

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    Если я правильно понимаю, то в
    Код (Javascript):
    1. success: function(data) { ...
    старый родительский эллемент с ненужными данными скрываю, а ниже в
    Код (Javascript):
    1. success: function(data) { ...
    пишу кусок кода новый с новыми данными, который надо отобразить на странице и вывожу с помощью: prepend, я правильно понимаю?
     
  23. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @AlexsaiL, да. Только не скрываете, а удаляете. И можно append
     
  24. AlexsaiL

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

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    А "success:" от html -кода пухнуть не будет? нагрузка не сильная пойдет? мне необходимо будет сменить контент в нескольких вкладках на странице.
     
  25. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    В success никакого html - там передача ответа от сервера в функцию-конструктор, которая может быть проинициализирована в любом другом месте. И в самой функции не html-код, а создание dom-элементов.
    Вы впринципе и не обязаны отправлять с сервера массив данных - Вы можете сгенерировать html на сервере. В этом случае в success будет одна строка:
    Код (Javascript):
    1. $('селектор контейнера').html(data);
     
    #50 Maputo, 27 ноя 2017
    Последнее редактирование: 27 ноя 2017
    AlexsaiL нравится это.