简体   繁体   English

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

[英]How to pass array from ajax to php?

I'm trying to pass array from ajax to php (controller). 我正在尝试将数组从ajax传递给php(控制器)。

What is wrong with second code as var_dump($data) of first code returns appropriate content and second returns NULL? 第二个代码有什么问题,因为第一个代码的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"

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()">

When passing an array to PHP, you want to include the array indicator: [] . 将数组传递给PHP时,您要包括数组指示符: [] 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): 此时,您可能还希望序列化数据(如@Adelphia在另一个答案中所述):

'data': JSON.stringify(data)

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

You can call it in PHP: print_r($_POST['data']); 您可以在PHP中调用它: print_r($_POST['data']);

You want to pass your data variable to PHP, which is an array, right? 您想将data变量传递给PHP,它是一个数组,对吗? Why not data = JSON.stringify(data); 为什么不data = JSON.stringify(data); and then on PHP's side, $data = json_decode($_POST['data'], true); 然后在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 }

    });   

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM