16.01.2019, 16:44
|
|
Аспирант
|
|
Регистрация: 12.08.2018
Сообщений: 61
|
|
Как передать массив объектов через 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.
|
|
16.01.2019, 17:03
|
|
Аспирант
|
|
Регистрация: 12.08.2018
Сообщений: 61
|
|
Nexus,
та же ошибка
NULL - Syntax error, malformed JSON
|
|
16.01.2019, 17:15
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Nexus
|
specsar=encodeURIComponent(specsar);
|
А смысл?
finlolo, вы чего-то не договариваете или делаете что-то не так, ибо если все по уму и объект как представленный, то никаких проблем возникать не должно.
|
|
16.01.2019, 17:24
|
|
Аспирант
|
|
Регистрация: 12.08.2018
Сообщений: 61
|
|
laimas,
в php у меня перед json_decode var_dump видит строку переданную ajax'ом. я делаю json_decode и уже null, код php я выложил
|
|
16.01.2019, 17:24
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,720
|
|
Сообщение от 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)
}
}
|
|
16.01.2019, 17:26
|
|
Аспирант
|
|
Регистрация: 12.08.2018
Сообщений: 61
|
|
Кину на всякий случай мой код 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);
}
|
|
16.01.2019, 17:32
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Проверил на
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 в 17:46.
|
|
16.01.2019, 17:34
|
|
Аспирант
|
|
Регистрация: 12.08.2018
Сообщений: 61
|
|
В общем. Проблему решил, проблема была локальная, в коде php перед этим подгружался файл от cms, когда его перестал подключать decode прошел, соответственно файл уже подключаю после decode. Всем спасибо
|
|
|
|