В общем выявил я причину синтаксической ошибки, ругался сам шаблонизатор на фигурные скобки- "}" фигурные скобки конфликтуют с синтаксисом разделителей, применил тег шаблонизатора {literal}{/literal}, синтаксическая ошибка пропала, но на сервере все таки не поймал переменную.
@AlexsaiL, Нужно исключать все возможные и невозможные варианты. Сможете ли Вы поймать на сервере данные отправленные в виде числа? Код (Javascript): ... url: ..., data: 123, ...
заметил ошибку. В общем написал такой код: PHP: if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { // Если к нам идёт Ajax запрос, то ловим его echo 'Это ajax запрос!'; foreach($_POST as $name => $val) { echo $name . ' = ' . $val . '<br>'; } exit; } //Если это не ajax запрос echo 'Это не ajax запрос!'; В консоли отображается :Это ajax запрос! num = 123<br> Заменил на ассоц.массив= в консоли отобразились данные что массив прилетел.
@AlexsaiL, значит дело в данных, если все остальное работает. Какое содержимое в переменной massString?
Код (Javascript): [{"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 подскажите, мне необходимо эту строку на стороне сервера преобразовать в массив?
@AlexsaiL, это массив. У меня при отправке показывает: Код (Text): array(1) { ["undefined"]=> string(0) "" } Там у Вас два элемента. Если преобразовать к виду json Код (Javascript): {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): array(2) { ["aaa"]=> array(9) { ["ID"]=> string(3) "900" ["ID_PRODUCT"]=> string(3) "900" ["NAME"]=> string(10) "s444 Black" ["ARCHIVE"]=> string(1) "3" ["GROUP_NAME"]=> string(16) "Смартфон" ["COMMENTS"]=> string(7) "hot.png" ["COLOR"]=> string(4) "#000" ["picture"]=> array(4) { [0]=> array(2) { ["big"]=> string(14) "b_s444_b_1.jpg" ["huge"]=> string(19) "huge/h_s444_b_1.jpg" } [1]=> array(2) { ["big"]=> string(14) "b_s444_b_2.jpg" ["huge"]=> string(19) "huge/h_s444_b_2.jpg" } [2]=> array(2) { ["big"]=> string(14) "b_s444_b_3.jpg" ["huge"]=> string(19) "huge/h_s444_b_3.jpg" } [3]=> array(2) { ["big"]=> string(14) "b_s444_b_4.jpg" ["huge"]=> string(19) "huge/h_s444_b_4.jpg" } } ["VALUE_RUS"]=> string(253) "<li> 4.0" TN (800x480) дисплей <li> 5 Мп Камера (фронтальная 1,3 Мп) <li> 512 МБ оперативной памяти <li> 4 ГБ встроенной памяти <li> Android 5.1 Операционная система" } ["bbb"]=> string(3) "900" } Может надо так сделать: Код (Javascript): var massString = JSON.stringify(mass[0][0]);
@Maputo если прописать ключ [0] Код (Javascript): var massString = JSON.stringify(mass[0]); то беру только первый необходимый массив, второй эллемент мне не нужен. --- Добавлено --- @Maputo прописал Код (Javascript): console.log(typeof massString); в консоли отобразило: string
Это в любом случае будет строка. Просто при конвертации в post-запрос из массива получается не то, что Вы ожидаете. Попробуйте с двумя нулями. Второй элемент массива - просто число 900, которое, наверняка у Вас в данных уже присутствует.
idClick - это и есть 900 id- продукта Код (Javascript): var mass = find(obj, idClick); --- Добавлено --- С Двумя нулями приходит: undefined
Вобщем вот в таком виде у меня приходят все данные в виде строки Код (Javascript): data: {data: massString}
@AlexsaiL, может я чего-то недопонял, но stringify возвращает json-представление массива. Чтобы его обработать в php - нужна функция json_decode... --- Добавлено --- и ранее я об этом вроде упоминал
вот таким образом: PHP: if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { // Если к нам идёт Ajax запрос, то ловим его echo 'Это ajax запрос!'; $rsProduct_color = json_decode($_POST['mass']); exit; } --- Добавлено --- Я где-то допустил ошибку и не дописал код?
@AlexsaiL, чудненько. Только теперь осталось индекс элемента массива $_POST правильный подобрать. Тот, что перед двоеточием пишите в передаваемом js объекте...
не до конца вас понял... --- Добавлено --- вы имели ввиду так?: Код (Javascript): data: {mass : mass},
@Maputo Подскажите пожалуйста, чтобы новый полученный массив подставить вместо старого на странице, необходимо создать доп функцию через ajax принять полученные данные со стороны сервера, пройтись по каждой строке где хранится в объекте data, и в функции делать вывод данных на страницу, поместить в теги(html) и вывести на страницу? Или есть другие варианты вывода данных без перезагрузки?
@AlexsaiL, не совсем понятна задача. Но скорее всего ее можно сделать так же как и при начальном получении значения в mass. Я так понял Вам нужна теперь обратная операция? Из json в html?
Мне необходимо, данные из полученного массива, вывести на странице вместо предыдущих. Если на сайте были фото на продукта белого цвета и цена другая, а в пришедшем массиве имеется черный цвет, заменить фото и цену у продукта на полученные данные без перезагрузки страницы.
Я в таких случаях создаю конструктор, который будет разбирать данные и по ним создавать целиком объект (DOM-элемент). А потом просто готовый объект заменяет старое содержимое. Чтобы создать такой конструктор - надо перед глазами иметь код html того участка, который заменяется.
Если я правильно понимаю, то в Код (Javascript): success: function(data) { ... старый родительский эллемент с ненужными данными скрываю, а ниже в Код (Javascript): success: function(data) { ... пишу кусок кода новый с новыми данными, который надо отобразить на странице и вывожу с помощью: prepend, я правильно понимаю?
А "success:" от html -кода пухнуть не будет? нагрузка не сильная пойдет? мне необходимо будет сменить контент в нескольких вкладках на странице.
В success никакого html - там передача ответа от сервера в функцию-конструктор, которая может быть проинициализирована в любом другом месте. И в самой функции не html-код, а создание dom-элементов. Вы впринципе и не обязаны отправлять с сервера массив данных - Вы можете сгенерировать html на сервере. В этом случае в success будет одна строка: Код (Javascript): $('селектор контейнера').html(data);