Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.99/277: Рейтинг темы: голосов - 277, средняя оценка - 4.99
 Аватар для rean1mator
84 / 84 / 1
Регистрация: 19.01.2011
Сообщений: 442

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

01.10.2013, 21:47. Показов 54943. Ответов 13

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

Вот JS(на func: 9 не обращайте внимания, если он не мешает работе с json):
JavaScript
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) {
                    }
                });
    });
});
А вот код принимающего PHP:
PHP
1
2
$json = json_decode($_POST['checks'], true);
            print_r ($json);
В результате PHP возвращает ошибку: Warning: json_decode() expects parameter 1 to be string, array given

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

Заранее благодарю!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.10.2013, 21:47
Ответы с готовыми решениями:

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

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

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

13
 Аватар для koza4ok
632 / 440 / 67
Регистрация: 19.09.2012
Сообщений: 1,632
01.10.2013, 22:31
data: {checks: checks, func: 9}
Форма записи не корректна
Cначала вам нужно преобразовать массив в строку для передачи его на сервер.Это можно сделать через формат JSON
JavaScript
1
var data='checks='+JSON.stringify(checks);
JavaScript
1
data: data
Полный пример
HTML5
1
2
3
4
<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>
JavaScript
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)
                    }
                });
    });
});
u.php
PHP
1
var_dump(json_decode($_POST["checks"]));
2
 Аватар для rean1mator
84 / 84 / 1
Регистрация: 19.01.2011
Сообщений: 442
02.10.2013, 09:31  [ТС]
koza4ok, спасибо за ответ!

Только вот что-то не понял строку:
JavaScript
1
var data='checks='+JSON.stringify(checks);
могу понять так:
JavaScript
1
var data=JSON.stringify(checks);
Если можно, объясните пожалуйста, как понять эту строку
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
02.10.2013, 09:53
rean1mator, checks - это имя под которым на стороне сервера можно будет получить значение. $_POST['checks'] будет содержать JSON данные.
1
 Аватар для rean1mator
84 / 84 / 1
Регистрация: 19.01.2011
Сообщений: 442
02.10.2013, 10:37  [ТС]
romchiksoad, благодарю за пояснение!
0
02.10.2013, 10:38

Не по теме:

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

0
 Аватар для rean1mator
84 / 84 / 1
Регистрация: 19.01.2011
Сообщений: 442
02.10.2013, 14:11  [ТС]
Получилось передасть JSON-строку в PHP, но вот в обратную сторону когда передаю, то не получается в JS строку преобразовать в массив JS.

Мой нынешний JS:
JavaScript
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);
            }
        });
 
    });
});
а тут php:
PHP
1
2
3
4
5
6
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{'id':45, 'uid':168752145, 'name':'Крендель'}. А когда data попадает в
JavaScript
1
  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, а соответственно, не выполняет действия там((
0
 Аватар для koza4ok
632 / 440 / 67
Регистрация: 19.09.2012
Сообщений: 1,632
02.10.2013, 15:16
Мозги у меня сейчас совсем не рабочие....
Зачем Вам
var newarr = $.parseJSON(data); ?

Просто

JavaScript
1
2
3
4
5
success: function(data) {
                      
                      
                        alert(data["id"]);
                    }
Наверно если установлен dataType: 'json', то jquery сам ответ с формата переводит в объект...

romchiksoad а Вы ник не меняли ? Не помню Вас.
1
 Аватар для rean1mator
84 / 84 / 1
Регистрация: 19.01.2011
Сообщений: 442
02.10.2013, 15:25  [ТС]
koza4ok, огромнейшее Вам спасибо!
Всё ожило!

А по поводу var newarr = $.parseJSON(data); - это я начитался кучу разной инфы по инету (аж дым из ушей валить начал) что мол надо это дело юзать.

Ешё раз огромное Вам спасибо
0
 Аватар для rean1mator
84 / 84 / 1
Регистрация: 19.01.2011
Сообщений: 442
03.10.2013, 16:30  [ТС]
Всё вроде бы хорошо, но наткнулся на неприятность. Если запрос отправляю без параметра dataType: 'json', то sucsess срабатывает, а если с dataType: 'json', то sucsess не хочет работать, но в Firebug я вижу, что ответ от сервера вернулся нормально.

По русской документации не нашел записей о том, что с параметром dataType: 'json' есть какие-то особенности с sucsess.

Подскажите пожалуйста, как заставить работать sucsess при включенном dataType: 'json' ?

Добавлено через 7 минут
единственное, что удалось найти по документации - это, что при dataType: 'json' не сработают глобальные события. Но sucsess, судя по документации не является глобальным событием, а есть локальным
0
странник
 Аватар для Donald28
810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2
03.10.2013, 19:00
koza4ok, rean1mator, в jQuery вообще то данные в формате JSON следующим образом обрабатываются:
JavaScript
1
2
3
4
success: function(data) {
                        alert(data.id);
                        alert(data.name);
                    }
1
 Аватар для rean1mator
84 / 84 / 1
Регистрация: 19.01.2011
Сообщений: 442
03.10.2013, 19:08  [ТС]
Да, я видел данный способ среди тех материаллов, которые довелось перечитать.

Как показывает практика - работают оба способа, но хотелось бы узнать, чем данный способ лучше или правильнее? (действительно итересует данная информация)
0
странник
 Аватар для Donald28
810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2
04.10.2013, 12:46
Для удобства, когда используются под массивы, например:
{'id':45, 'uid':168752145, 'name':{'Family':'Иванов', 'Name': {'1':'Иван','2':'Иванович'}}}
тогда достаточно просто добраться до имени с отчеством:
JavaScript
1
2
3
success: function(data) {
                        alert(data.name.Name[1]+' '+data.name.Name[2]);
                    }
1
 Аватар для rean1mator
84 / 84 / 1
Регистрация: 19.01.2011
Сообщений: 442
04.10.2013, 13:02  [ТС]
Donald28, спасибо за информацию!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.10.2013, 13:02
Помогаю со студенческими работами здесь

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

Как ассоциативный массив из PHP передать в Ajax и вывести на страницу
Добрый день. В name.php я получаю из БД - ассоциативный массив $rows. Ajax принимает этот массив, но выводит на экран Array ...

Вытащить переменную из цикла PHP в функцию JS, и через AJAX обратно в PHP
Здравствуйте! Моя задача сделать форму обратной связи, но не самую простую. Изначально на форме отображается список элементов, уже...

Передать параметр функции javascript в формате Json
Здравствуйте. Запутался с кавычками. Есть виджет, который выводит на карту (яндекс) объекты. при выборе - открывается балун. В балуне...

Передать переменную из js в php и обратно
function getstations(value) { var str=document.getElementById('street'); мне str.value надо передеать в select.php, чтобы к нему...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru