2015-04-28 4 views
0

Я пытаюсь передать массив из ajax в php (контроллер).Как передать массив из ajax в php?

Что случилось со вторым кодом, поскольку var_dump($data) первого кода возвращает соответствующий контент, а второй возвращает NULL?

ПЕРВЫЙ. ХОРОШО.

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 } 
    }); 
} 

ТРЕТИЙ. UGLY

var elementy = document.getElementsByClassName('inputISBN'); 
undefined 
var data = []; 
undefined 
data[elementy[0].name] = elementy[0].value; 
"667" 

В-третьих, это строка за строкой из кода, написанного на консоли браузера. И это возвращает то, что нужно.


редактировать

данные и вытягивается отсюда:

<input type="number" class="inputISBN" size="2" name="exampleName" 
       value="666" onchange="myFunction()"> 

ответ

2

При передаче массива в PHP, вы хотите, чтобы включить индикатор массива: []. I thi8nk вам нужен объект: {}.

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 } 
    }); 
} 

На данный момент, вы также можете сериализовать данные (как уже упоминалось в другой ответ по @Adelphia):

'data': JSON.stringify(data)

jsFiddle: https://jsfiddle.net/Twisty/cw77ann7/

Вы можете назовите его в PHP: print_r($_POST['data']);

+0

Какая разница будет, что сделать для PHP? –

+0

Зависит ... от кода OPs не ясно, что он пытается сделать. Но именно так вы передаете данные, чтобы быть частью массива. И вот что он спросил. – Twisty

+0

@Twisty 'elementy [0] .name' всегда являются текстовыми данными, а' elementy [0] .value' являются номерами. Ваш подсказку с индикатором массива не работает. Еще NULL. – Sruj

1

Вы хотите передать переменную в PHP, которая это массив, не так ли? Почему не data = JSON.stringify(data);, а затем на стороне РНР, $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 } 

    }); 

} 
+0

Должен ли я просто вставить вашу строку 'data = JSON.stringify (data);' after line 'data [ elementy [0] .name] = elementy [0].value; '(из моего второго кода)? Если да, то var_dump возвращает 'array (size = 1) 0 => string '[]' (length = 2)' вместо чего-то вроде '['name'] => '667'' – Sruj

+0

@Sruj проверить мое редактирование. –

+0

@Sruj сделать jsfiddle и позволить мне посмотреть, что вы на самом деле делаете, я исправлю это для вас. –

Смежные вопросы