Sruj
Sruj

Reputation: 1207

How to pass array from ajax to php?

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

Answers (2)

Twisty
Twisty

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

I wrestled a bear once.
I wrestled a bear once.

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

Related Questions