将多维数组从JQuery AJAX发送到PHP

时间:2014-12-08 07:38:43

标签: javascript php jquery arrays ajax

我想从JQuery AJAX向PHP发送一个多维数组,但它正在接收这样的PHP

Array
(
[recordid] => 38
[locations] => [object Object],[object Object]
)
我必须犯一些愚蠢的错误。这是代码。 它从表中获取记录并发送给PHP

$(document).on('click','.savenow',function(){
    recordid = $(this).data('id');

    locations = [];

    $('.selectrec').each(function () {
        parent = $(this).parent().parent();

        name    = parent.find('td').eq(5);
        address = parent.find('td').eq(6);
        lat     = parent.find('td').eq(1);
        lng     = parent.find('td').eq(2);

        row = [name,address,lat,lng];

        locations.push(row);
    });

    locations = locations.toString();
    $.ajax({
        type: "POST",
        url:'/record/saveSearchedLocations',
        data: { recordid: recordid,locations:locations },
        dataType: 'json',
        success: function (data) {
            console.log(data);
        },
        error:function(data){
          alert("something went wrong, please try again.");
        }
    });

});

这是我接收数据的PHP函数:

function saveSearchedLocations(){
    print_r($_POST);
}

4 个答案:

答案 0 :(得分:4)

使用JSON.stringify()代替toString(),如下所示:

将您的AJAX调用更改为:

$(document).on('click','.savenow',function(){
    recordid = $(this).data('id');

    locations = [];

    $('.selectrec').each(function () {
        parent = $(this).parent().parent();

        name    = parent.find('td').eq(5);
        address = parent.find('td').eq(6);
        lat     = parent.find('td').eq(1);
        lng     = parent.find('td').eq(2);

        row = [name,address,lat,lng];

        locations.push(row);
    });

    ajaxData = { recordid : recordid,locations : locations }
    $.ajax({
        type: "POST",
        url:'/record/saveSearchedLocations',
        data: JSON.stringify(ajaxData),
        dataType: 'json',
        success: function (data) {
            console.log(data);
        },
        error:function(data){
          alert("something went wrong, please try again.");
        }
    });

});

JSON.stringify()将您的数组转换为实际的json字符串,而不是使用逗号作为分隔符连接数组(一级)的Array.prototype.toString()

答案 1 :(得分:1)

将此答案作为参考:

我认为您需要使用JSON.stringify(selectedData)才能在服务器端使用它。

jQuery:

var obj = { 'risk_cat': risk_cat, 'risk_type': risk_type };
selectedData.push(obj);

$.post('serive.php', { DTO: JSON.stringify(selectedData) }, 
function(data){ /* handle response,  */ });

service.php:

header('Content-type: application/json');
header('Cache-Control: no-cache, must-revalidate');

$foo = json_decode($_POST['DTO']);


$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5); //example data

echo json_encode($arr);

这应该让你开始。在你的ajax响应中,alert(data.a)会发出警告" 1"

答案 2 :(得分:0)

sendAjax = function() {
      var data = {

             foo: 123,
             bar: 456,
             rows: [{
                 column1: 'hello',
                 column2: 'hola',
                 column3: 'bonjour',
             }, {
                 column1: 'goodbye',
                 column2: 'hasta luego',
                 column3: 'au revoir',
             }, ],
             test1: {
                 test2: {
                     test3: 'baz'
                 }
             }
         };

         $.ajax({
             type: 'post',
             cache: false,
             url: './ajax/',
             data: data
         });
     }

单击该按钮时,以下结构化数据显示在PHP的$ _POST变量中:

Array
    (
        [foo] => 123[bar] => 456[rows] => Array(
            [0] => Array(
                [column1] => hello[column2] => hola[column3] => bonjour
            )

            [1] => Array(
                [column1] => goodbye[column2] => hasta luego[column3] => au revoir
            )

        )

        [test1] => Array(
            [test2] => Array(
                [test3] => baz
            )

        )

    )

这只适用于jQuery 1.4.0+。否则jQuery只是在关键字“rows”的嵌套数组上调用.toString(),在键“test1”调用嵌套对象,然后用无用的值“[object object

]传递给PHP

这里是你可以在这里查看的链接 https://www.zulius.com/how-to/send-multidimensional-arrays-php-with-jquery-ajax/

答案 3 :(得分:0)

将您的数据放入表单并使用serializeArray()

发送表单数据