Reputation: 1207
I'm trying to pass array from ajax to php (controller).
What is wrong with second code as var_dump($data)
of first code returns appropriate content and second returns NULL?
FIRST. GOOD.
function myFunction() {
var elementy = document.getElementsByClassName('inputISBN');
var data = elementy[0].value;
$.ajax({
url: "{{ path('test') }}",
type: "POST",
data: { "data": data }
});
}
SECOND. BAD
function myFunction() {
var elementy = document.getElementsByClassName('inputISBN');
var data = [];
data[elementy[0].name] = elementy[0].value;
$.ajax({
url: "{{ path('test') }}",
type: "POST",
data: { "data": data }
});
}
THIRD. UGLY
var elementy = document.getElementsByClassName('inputISBN');
undefined
var data = [];
undefined
data[elementy[0].name] = elementy[0].value;
"667"
Third one is line by line from the socond code written in browser console. And it's return what it should.
edit
and data is pulled out from here:
<input type="number" class="inputISBN" size="2" name="exampleName"
value="666" onchange="myFunction()">
Upvotes: 0
Views: 2298
Reputation: 30893
When passing an array to PHP, you want to include the array indicator: []
. I thi8nk you need an Object: {}
.
function myFunction() {
var elementy = $('.inputISBN');
var data = {};
$.each(elementy, function(){
data[$(this).attr('name')] = $(this).val();
})
$.ajax({
url: "{{ path('test') }}",
type: "POST",
data: { "data": data }
});
}
At this point, you may also want to serialize the data (as was mentioned in the other answer by @Adelphia):
'data': JSON.stringify(data)
jsFiddle: https://jsfiddle.net/Twisty/cw77ann7/
You can call it in PHP: print_r($_POST['data']);
Upvotes: 2
Reputation: 23379
You want to pass your data
variable to PHP, which is an array, right? Why not data = JSON.stringify(data);
and then on PHP's side, $data = json_decode($_POST['data'], true);
function myFunction() {
var elementy = document.getElementsByClassName('inputISBN');
i = elementy.length;
data = [];
while(i--) data[elementy[i].name] = elementy[i].value;
data = JSON.stringify(data);
$.ajax({
url: "{{ path('test') }}",
type: "POST",
data: { "data": data }
});
}
Upvotes: 1