Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.01.2019, 15:44
Аватар для finlolo
Аспирант
Отправить личное сообщение для finlolo Посмотреть профиль Найти все сообщения от finlolo
 
Регистрация: 12.08.2018
Сообщений: 50

Как передать массив объектов через ajax
Зравствуйте.

Передаю массив объектов, вот такой:
(3) [{…}, {…}, {…}]
0: {name: "1", spec: "111"}
1: {name: "111", spec: "111"}
2: {name: "111", spec: "111111"}
length: 3


делаю
specsar =  JSON.stringify(specsar);


php получает такое пред json_decode:
["specs"]=>
string(110) "[{\"name\":\"1\",\"spec\":\"111\"},{\"name\":\"111\ ",\"spec\":\"111\"},{\"name\":\"111\",\"spec\":\"1 11111\"}]"

делаю в php это
$specs = json_decode($_POST['specs'], true);
print_r($specs);
var_dump($specs);


print_r "молчит", а var_dump возвращает NULL

Вопрос: что мне сделать, чтобы я мог работать в php с массивом объектов, который я передаю из js через ajax.
Ответить с цитированием
  #2 (permalink)  
Старый 16.01.2019, 15:52
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 2,943

Попробуйте перед отправкой на сервер сделать так:
specsar=encodeURIComponent(specsar);

https://developer.mozilla.org/ru/doc...deURIComponent
Ответить с цитированием
  #3 (permalink)  
Старый 16.01.2019, 16:03
Аватар для finlolo
Аспирант
Отправить личное сообщение для finlolo Посмотреть профиль Найти все сообщения от finlolo
 
Регистрация: 12.08.2018
Сообщений: 50

Nexus,
та же ошибка


NULL - Syntax error, malformed JSON
Ответить с цитированием
  #4 (permalink)  
Старый 16.01.2019, 16:15
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 10,440

Сообщение от Nexus
specsar=encodeURIComponent(specsar);
А смысл?

finlolo, вы чего-то не договариваете или делаете что-то не так, ибо если все по уму и объект как представленный, то никаких проблем возникать не должно.
Ответить с цитированием
  #5 (permalink)  
Старый 16.01.2019, 16:24
Аватар для finlolo
Аспирант
Отправить личное сообщение для finlolo Посмотреть профиль Найти все сообщения от finlolo
 
Регистрация: 12.08.2018
Сообщений: 50

laimas,
в php у меня перед json_decode var_dump видит строку переданную ajax'ом. я делаю json_decode и уже null, код php я выложил
Ответить с цитированием
  #6 (permalink)  
Старый 16.01.2019, 16:24
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 2,943

Сообщение от laimas
А смысл?
Вдруг прокатит)

Не представляю в каком случае передача может зафейлиться.

$.post('/test.php',{data:JSON.stringify([{foo:'bar'},{'baz':false}])},function(res){
	console.clear();
	console.log(res);
});
<?php

var_dump(
	json_decode($_POST['data'],true)
);

Response:
array(2) {
  [0]=>
  array(1) {
    ["foo"]=>
    string(3) "bar"
  }
  [1]=>
  array(1) {
    ["baz"]=>
    bool(false)
  }
}
Ответить с цитированием
  #7 (permalink)  
Старый 16.01.2019, 16:26
Аватар для finlolo
Аспирант
Отправить личное сообщение для finlolo Посмотреть профиль Найти все сообщения от finlolo
 
Регистрация: 12.08.2018
Сообщений: 50

Кину на всякий случай мой код ajax

function ajaxGet(url, name, subname, article, price, count, product, radio, text, img, images, specs, callback){
    var request = new XMLHttpRequest();
    request.onreadystatechange = function(){
        if (request.readyState == 4 && request.status == 200){
             if(callback) callback(JSON.parse(request.responseText));
        }
    }
    request.open('POST', url);
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    request.send("name="+name+"&subname="+subname+"&article="+article+"&count="+count+"&product="+product+"&radio="+radio+"&text="+text+"&img="+img+"&images="+images+"&specs="+specs);
}
Ответить с цитированием
  #8 (permalink)  
Старый 16.01.2019, 16:32
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 858

Проверил на

PHP index.php"
<?php

$specs = json_decode($_POST['specs'], true);
print_r($specs);
var_dump($specs);

?>



в браузере запускаю
fetch("index.php", {
	method: "post",
	body: new URLSearchParams({
		specs: JSON.stringify([{name: "1", spec: "111"}, {name: "111", spec: "111"}, {name: "111", spec: "111111"}]),
	})
})
.then(response => response.text())
.then(console.log)


Всё работает, в консоли пишет
Код:
Array
(
    [0] => Array
        (
            [name] => 1
            [spec] => 111
        )

    [1] => Array
        (
            [name] => 111
            [spec] => 111
        )

    [2] => Array
        (
            [name] => 111
            [spec] => 111111
        )

)
array(3) {
  [0]=>
  array(2) {
    ["name"]=>
    string(1) "1"
    ["spec"]=>
    string(3) "111"
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(3) "111"
    ["spec"]=>
    string(3) "111"
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(3) "111"
    ["spec"]=>
    string(6) "111111"
  }
}

Последний раз редактировалось Malleys, 16.01.2019 в 16:46.
Ответить с цитированием
  #9 (permalink)  
Старый 16.01.2019, 16:34
Аватар для finlolo
Аспирант
Отправить личное сообщение для finlolo Посмотреть профиль Найти все сообщения от finlolo
 
Регистрация: 12.08.2018
Сообщений: 50

В общем. Проблему решил, проблема была локальная, в коде php перед этим подгружался файл от cms, когда его перестал подключать decode прошел, соответственно файл уже подключаю после decode. Всем спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать задержку вывода данных через ajax ghost666 AJAX и COMET 2 27.05.2018 16:21
Как преобразовать массив объектов в массив массивов sovsem-nub Events/DOM/Window 4 12.05.2018 21:56
Как передать в массив перемеенную как ключ массива? фдуч Общие вопросы Javascript 15 11.01.2018 20:21
как передать измененные параметры AJAX в другую функцию? akselei Элементы интерфейса 2 19.10.2013 11:46
Как посредставам одного клика передать ajax 3 переменных Dimario AJAX и COMET 4 14.04.2011 21:13