Test Ajax php

Передать массив в формате JSON из AJAX в PHP и обратно

Здравствуйте!
Помогите пожалуйста разобраться.
Нужно передать массив из AJAX в PHP, а потом другой массив из PHP обратно в AJAX.
Массив в JS формируется при помощи обхода checkbox на форме и отбираются те, которые checked и их значения собираются в массив.
За вечер перелопатил кучу статей, доков и тем на форумах (в том числе несколько тем здесь). Вроде бы всё делаю, как завещано, а не хочет нормально работать злодей

Вот JS(на func: 9 не обращайте внимания, если он не мешает работе с json):

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
$(document).ready(function() { $('#some_button').on('click', function() { var checks = new Array(); $("input[name='ls_id']:checked").each(function() {checks.push($(this).val());}); $.ajax({ type: 'POST', url: "какой-то url", dataType: 'json', cache: false, data: {checks: checks, func: 9}, success: function(data) { } }); }); });
$json = json_decode($_POST['checks'], true); print_r ($json);

В результате PHP возвращает ошибку: Warning: json_decode() expects parameter 1 to be string, array given

Помогите пожалуйста понять, как заставить их общаться в обоих направлениях.

Как передать массив из php в ajax?
Перерыл все форумы, все говорят о передаче через JSON, но я понятия не имею как это работает. .

Как передать массив из javascript в php используя json
Как передать массив в php, и там вывести этот массив используя json? var massiv = ;

Читайте также:  Java method meaning of

Ajax передать массив в php (небольшая заморочка)
В двух словах: Подключаемся к ссылке, получаем json, в цикле выдергиваем id адреса. Нужно эти id.

Передать через AJAX в PHP двумерный массив
Добрый день. Есть примерно такой код: var range = , sliderValues = ; . sliderValues = range;.

data:
Форма записи не корректна
Cначала вам нужно преобразовать массив в строку для передачи его на сервер.Это можно сделать через формат JSON

var data='checks='+JSON.stringify(checks);
input type="checkbox" name="ls_id" value="1"> input type="checkbox" name="ls_id" value="2"> input type="checkbox" name="ls_id" value="3"> button value="click" id="some_button" value="">send_ajax/button>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
script> $(document).ready(function() { $('#some_button').on('click', function() { var checks = new Array(); $("input[name='ls_id']:checked").each(function() {checks.push($(this).val());}); var data='checks='+JSON.stringify(checks); //alert(data); $.ajax({ type: 'POST', url: "u.php", dataType: 'json', cache: false, data: data, success: function(data) { alert(data) } }); }); });
var_dump(json_decode($_POST["checks"]));

koza4ok, спасибо за ответ!

Только вот что-то не понял строку:

var data='checks='+JSON.stringify(checks);
var data=JSON.stringify(checks);

rean1mator, checks — это имя под которым на стороне сервера можно будет получить значение. $_POST[‘checks’] будет содержать JSON данные.

rean1mator, для этого мы все тут и собрались 🙂 Пожалуйста 🙂

Получилось передасть JSON-строку в PHP, но вот в обратную сторону когда передаю, то не получается в JS строку преобразовать в массив JS.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
$(document).ready(function() { $('#какой-то id').on('click', function() { var checks = new Array(); $("input[name='ls_id']:checked").each(function() { checks.push($(this).val()); }); var data=JSON.stringify(checks); $.ajax({ type: 'POST', url: "какой-то url", dataType: 'json', cache: false, data: {checks: data, func: 9}, success: function(data) { var newarr = $.parseJSON(data); alert(newarr); } }); }); });
if (isset($_POST['checks'])) { $php_json = json_decode($_POST['checks'], TRUE); $php_arr = array ('id'=>45, 'uid'=>168752145, 'name'=>'Крендель'); $js_json = json_encode($php_arr); echo $js_json; }

В $php_json после декодирования попадает норм php-массив.
$php_arr — вручную создал тестовый массив и кинул его в json_encode($php_arr);

В итоге в JS в data прилетает Object . А когда data попадает в

var newarr = $.parseJSON(data);

то в newarr прилетает null, а alert() соответственно выдает пустоту

Добавлено через 1 час 14 минут
Пробовал передать в json_encode() разные массивы: ассоциативные, без указания ключей (автоинкрементный ключ), брал значения в разные кавычки, но всё равно в JS результат получатся одинаковый, хотя json_encode() при подаче разного типа массивов конвертирует их поразному

Добавлено через 45 минут
Сделал ещё один «финт ушами».
JS передал данные json-м в php, там прилетевшие данные попадают в json_decode(), потом я резльтат json_decode() кидаю в json_encode() и бросаю обратно. В JS так же загоняю прилетевшие данные в $.parseJSON(). При таком раскладе он даже не захоидит в sucsess, а соответственно, не выполняет действия там((

Источник

Как передать HTML объект аяксом в php-скрипт?

Я хочу передать методом POST php-обработчику HTML-страничку целиком. Начиная от

и заканчивая

. Использую для этого метод $.post (jQuery), который позволяет передавать либо строку, либо объект.
Как передать HTML-содержимое строкой я не придумал. При попытке передать страницу в формате JSON
JSON.stringify(window.document)
я получаю совсем не то, что мне надо:

Методы и свойства всякие мне как раз не нужны.

Наверняка есть какой-то простой и очевидный способ передать HTML-код аяксом на сервер, но я никак не могу его найти. Подскажите пожалуйста куда копать.

enovot

Андрей По моему передавать целую страницу вообще плохая идея. Но если вы уж так решили. Вам нужно передавать не JSON данные, а html или text. Метод jQuery.ajax( [settings ] ) принимает объект settings, В свойствах которого нужно указать dataType

На сколько я понимаю, dataType определяет тип данных, которые мы получаем от сервера. А у меня проблема с типом данных, передаваемых на сервер.
Безусловно, я попробовал Ваше решение, но получил ошибку:
TypeError: ‘click’ called on an object that does not implement interface HTMLElement.
Я так понимаю, что ругается на формат передаваемых данных.

П.С. Страницу целиком я передаю на сервер, чтобы ее сохранить в файл. Она создается в браузере пользователя аяксом и потом при желании ее можно сохранить в файл и скачать.

На всякий случай привожу код целиком:

Аякс запрос передаёт строковые данные. Потому вам нужно получать не объект, и не объект jquery, пытаясь его передать на сервер! а получить строковые данные, и присваивать их как значения к ключам. Которые вы уже передадите в вашем POST запросе.

var data=""; data="name="+encodeURIComponent($("ваш_блок").prop("outerHTML")); data+="content="+encodeURIComponent($("ваш_другой_блок").prop("outerHTML")); $.ajax( < url: url, type: "POST", data: data, success: function()< /*обработчик вашей функции*/>)>

Вам ещё в настройках PHP на сервере надо будет проверить значение переменной post_max_size и увеличить её под ваши нужды.

Мб, кому понадобиться. Для себя нашел вот такой способ, упростив немного ответ — Олег а для передачи не только dom-дерева элемента, но и других параметров.

var par1 = 'какие-то текстовые данные'; var par2 = $("#elem").prop("outerHTML"); //получаем весь dom элемента $.ajax(< type: 'post', url: "url", dataType: 'html', data: (< d: par1, v: par2, >), success: function(response)<> >);

Войдите, чтобы написать ответ

Автоклик href при условии?

Источник

Передать данные из javascript PHP Ajax

Передача данных от fronted на backend(от javascript в php в нашем случае) сейчас достаточно часто используемая процедура, естественно, когда известно, как это сделать.

Что потребуется для работы:

  • Сервер, где можно запустить php-скрипты;
  • Текстовый редактор;
  • Базовые знания PHP;
  • Базовые знания Javascript;
  • Понимание как работают GET и POST — запросы, в данной статье в основном будут использоваться POST — запросы.

Совсем простой пример

Несколькими годами раньше, нужно было писать большие и сложные запросы, но с приходом Jquery, все стало гораздо проще, поэтому первым шагом подключаем библиотеку jquery:

В первом примере, будем просто отправлять строку, при помощи функции $.post Jquery, где первым параметром передается название нашего php-скрипта, вторым — данные, если они есть, третьим функция обратного вызова(callback), в аргумент data, которой к нам придет ответ от сервера, если он будет. Пример кода js:

  

В результате у Вас должен получиться файл index.php, примерно такого содержания:

            

В php эти данные придут в $_POST[‘dataReq’]. Поэтому в самом простом примере, мы возьмем эту строку и отправим ее обратно, без всякой проверки. Пример кода script.php:

Открываем консоль в браузере и проверяем результат. В данном примере произошла передача данных от javascript к php и обратно, но без проверок, это было сделано специально, чтобы не усложнять и настроить коннект. В некоторых случая, когда нужно просто подгрузить данные, в фоновом режиме, этого может оказаться достаточно. Ссылка, на скачивание архива с примером, описанного выше.

Если удалось запустить файл из примера и посмотреть в консоле браузера результат, можно двигаться дальше.

Чуть сложнее

В реальности, загрузка данных происходит при наступлении какого-то события, например нажатие на кнопку, или ввод символов с троку поиска. Усложним пример, добавив обработчик на кнопку и подгрузку в div данных с сервера.

Модифицируем файл index.php, добавим кнопку,

, куда будем выводить результат и немного перепишем js, отредактируйте Ваш index.php, чтобы он стал такого содержания:

             

Также немного изменим файл script.php, его новый код:

Теперь мы по клику передаем число 5, на сервере к пришедшему числу прибавляется 25 и выводится под кнопкой число 30. То есть, происходит отправка данных, модификация и отображение. По ссылке ниже, можно скачать новый пример:

Передача и прием объектов

Наиболее распространенным данными, при передачи Ajax являются объекты, например в формате JSON. В следующем примере разберем вариант, где будем передавать данные из поля input, на сервере будем обрабатывать приходящие данные и отправлять назад массив php преобразованный в JSON объект и наполнять из него тег select, в зависимости от отправленного числа. Для этого модифицируем файл index.php, его новый код будет таким:

          

В js добавилась проверка приходящего результата, если он не равен 0, то в цикле наполняем тег select. Если же нам придет в ответе 0, это означает, что такого списка нет, так как нет такого ключа в массиве на сервере, (см. ниже описание под обновленным кодом script.php). В коде js добавил комментарии, за что отвечает та или иная строка.

Также модифицируем файл script.php, его новый код будет таким:

 array( 1 => 'Автомобиль', 2 => 'Лодка', 3 => 'Дом', 4 => 'Коробка', 5 => 'Самокат', 6 => 'Мотоцикл', 7 => 'Автобус', 8 => 'Баржа', ), 2 => array( 1 => 'Роза', 2 => 'Фиалка', 3 => 'Тюльпан', 4 => 'Ромашка', 5 => 'Ирис', ), 3 => array( 1 => 'Ресторан', 2 => 'Магазин', 3 => 'Кафе', 4 => 'Бистро', 5 => 'Пекарня', 6 => 'Палатка с пирожками', ), 4 => array( 1 => 'Красный', 2 => 'Синий', 3 => 'Белый', 4 => 'Оранжевый', 5 => 'Зеленый', 6 => 'Фиолетовый', 7 => 'Черный', 8 => 'Желтый', 9 => 'Серый', 10 => 'Розовый', 11 => 'Голубой', ), 5 => array( 1 => 'Австралия', 2 => 'Индия', 3 => 'Китай', 4 => 'Япония', 5 => 'Испания', ), ); $param = $_POST['dataReq']; if(array_key_exists($param,$arrToSend))< echo json_encode($arrToSend[$param],JSON_UNESCAPED_UNICODE); >else < echo 0; >?>

В нем добавился массив, с элементами, и обработка данных из запроса, в переменную $param сохраняем то, что пришло у нас от javascript, затем при помощи конструкции if else и встроенной функции array_key_exists проверяем есть ли такой ключ в массиве $arrToSend, если есть, то трансформируем вложенный массив, по этому ключу при помощи функции json_encode в формат JSON и отправляем, если же ключа в основном массиве нет, то просто отправляем 0, это нужно для проверки на стороне js.

Результат этого примера должен быть такой, как на gif-ке ниже:

Ссылка на оф. сайт Jquery, документация по функции $.post, которая используется в статье. https://api.jquery.com/jquery.post/

Статья в ближайшее время будет дописана, с большим количеством примеров.

Источник

Оцените статью