@Maputo, Подскажите пожалуйста) извиняюсь что немного туплю, еще такой вопрос, на стороне сервера прописан вот такой код: PHP: if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { // Если к нам идёт Ajax запрос, то ловим его echo 'Это ajax запрос!'; echo json_decode($_POST['massString']); exit; } Сейчас хочу сгенерировать страницу html на сервере, из отобранного массива данных которые находятся в "massString" и потом через js отобразить их на странице, но не могу извлечь на стороне сервера прешедшие данные для работы с ними, подскажите как правильно это сделать?
А что получается у Вас вот тут: PHP: echo json_decode($_POST['massString']); и в какой вид это надо привести?
в консоли отображается массив, а мне надо на странице php получить этот массив, чтобы использую значения необходимых ключей, создать кусок кода html -страницы и вернуть его в место удаленного блока на странице.
@AlexsaiL, да. Я это понял. Тут важна конкретика. Как структурированы данные в массиве и как их надо расположить в html?
Данные в виде ассоц массива, а в html хочу расположить подставляя нужные ключи массива, для отображения значения ключей, в таком виде: HTML: <span>'.$r['GROUP_NAME'].'</span>
@AlexsaiL, я делаю так: шаблон HTML(например файл item.html) HTML: <div class="%class_name%"> <article><h3>%title%</h3> <img src="%src%" alt="%alt%" ...> ... </article> </div> Массив PHP: $arr = ['class_name' => 'some_name', 'title' => 'Название товара', 'src' => 'http://..../12345678.jpg', 'alt' => 'товар черного цвета', // и т.д. ]; Далее читаю содержимое файла и заменяю все %метки% на данные из массива по ключам: PHP: $html = file_get_contents('абсолютный путь к файлу item.html'); $html = preg_replace_callback('/%([a-z_]+)%/', function($matches) use ($arr) { if(isset($arr[$matches[1]])) { return $arr[$matches[1]]); } return ''; }, $html); echo $html;
@Maputo использую шаблонизатор, так что у меня все будет немного по другому, я как понимаю, массив $arr - это то, что пришло с js на сервер, но я не могу присвоить переменной, то что пришло с js, не получается.
приходит: PHP: array(1) { ["mass"]=> string(2522) "{"ID":"902","ID_PRODUCT":"902","NAME":"S444 White","PICTURE":"\r\n\r\n \r\n Камера 5 Мп \r\n 4 ядра 1.3 ГГц 4,0\" \r\n 2 SIM- карты 1500 мАч Android 5.1 \r\n ","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":" 4.0\" TN (800x480) дисплей\r\n 5 Мп Камера (фронтальная 1,3 Мп)\r\n 512 МБ оперативной памяти\r\n 4 ГБ встроенной памяти\r\n Android 5.1 Операционная система",}" }
@AlexsaiL, о чем я и предупреждал. Согласуйте имя передаваемого параметра. А то получается странное - посылаете к бабушке Ваню, а перезвонив ей - спрашиваете, не пришёл ли к ней Петя...
PHP: object(stdClass)#8 (18) { ["ID"]=> string(3) "902" ["ID_PRODUCT"]=> string(3) "902" ["NAME"]=> string(15) "S444 я вместо $_POST['mass'] прописал $_POST['massString'], не внимательно написал код.
Так уже пришло массивом PHP: array(18) { ["ID"]=> string(3) "902" ["ID_PRODUCT"]=> string(3) "902" ["NAME"]=> string(15) "S444
@Maputo Приветсвую!) Подскажите пожалуйста). Снова вопрос возник. Дописал в общем подгружаемый контент, то есть при клике по цвету, отображается другой нужный контент с нужным цветом продукта(т.е. на странице продукта он по клику взял id в ajax сравнил его со значением, и вернул массив родителя в котором он находится, все отработало, все хорошо, но если на подгруженном контенте кликнуть на выбор следующего другого цвета, то он мне перезагружает страницу) получается что он не находит на главной странице массив в котором проходит отбор по значению, и ему нечего вернуть и он перегружает страницу? или в каких случаях он может перезагрузить страницу?
@AlexsaiL, значит у Вас в первом случае на кнопке был обработчик события, который отсылал через аякс данные, а для нового контента получилась просто ссылка. Сравните полученный html с исходным (кнопки с цветом).
первая ссылка(отправляет в ajax): HTML: <a href="" class="colorImgs individOnClick" id="{$item['ID_PRODUCT']}"><span style="background-color: {$item['COLOR']};"></span></a> а это которая находится в подгружаемом контенте: HTML: echo '<a href="" class="colorImgs individOnClick" id="'.$item['L_10_IDH_1'].'"><span style="background-color: '.$item['COLOR'].';"></span></a>'; Идентификаторы подставляются одинаковые, цвет соответсвенно. --- Добавлено --- @Maputo в js прописано Код (Javascript): $(".individOnClick").click(function (event){ event.preventDefault(); при клике отменяю событие ссылки
@AlexsaiL, получается, что обработчик у Вас в js цепляется по одному из имени классов - его еще раз надо прицепить после вставки нового содержимого --- Добавлено --- Аякс в этом же обработчике?
Тогда после вставки надо проиграть подобный код: Код (Javascript): $(".individOnClick").off('click').click(function (event){ ... // и все что далее до конца кода обработчика
Да после вставки, но чтобы не перегружать код - его лучше прописать одной функцией и ее вызвать. Я так понимаю там рекурсия получится.