如何将数组从ajax传递给php?

时间:2015-04-28 23:35:45

标签: php jquery ajax

我试图将数组从ajax传递给php(控制器)。

第二个代码有什么问题,因为第一个代码的var_dump($data)返回适当的内容而第二个返回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"

第三个是在浏览器控制台中编写的socond代码中逐行显示的。并且它会返回应有的东西。

修改

并从此处提取数据:

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

2 个答案:

答案 0 :(得分:2)

将数组传递给PHP时,您希望包含数组指示符:[]。我知道你需要一个对象:{}

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']);

答案 1 :(得分:1)

您想将data变量传递给PHP,这是一个数组,对吧?为什么不是data = JSON.stringify(data);然后是PHP的$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 }

    });   

}