如何将数组从JS传递给PHP?

时间:2017-04-08 09:46:24

标签: javascript php jquery arrays parameter-passing

这是我的代码:

    $(document).on('click', '#csv_export', function () {

        // I need to pass this array to where the form below submits
        var arr = ['item1', 'item2'];

        $('<form action="csv_export/person?filename=export.csv" method="POST"/>')
        .append($('{!! csrf_field() !!}<input type="hidden" name="type" value="save">'))
        .appendTo($(document.body)) //it has to be added somewhere into the <body>
        .submit();
    });

正如我在我的代码中所评论的那样,我需要将arr传递给表单指出的页面。我怎么能这样做?

注意到我可以把它放在表格中:

<input type="hidden" name="arr" value="'+arr+'">

但我有两个问题:

  1. 字符长度限制
  2. 结果将是一个字符串。 (虽然我需要服务器端的数组)

1 个答案:

答案 0 :(得分:0)

使用Comparator将数组转换为JSON。而不是将输入构造为字符串,使用jQuery函数来执行此操作:

JSONObject.writeJSONString(Map,Writer)

在PHP脚本中,使用JSON.stringify()来获取数组。

您还应该能够使用AJAX:

$('<form action="csv_export/person?filename=export.csv" method="POST"/>')
    .append($('{!! csrf_field() !!}'))
    .append($("<input>", {
        type: 'hidden',
        name: 'arr',
        value: JSON.stringify(arr)
    });
).appendTo('body')
.submit();

对于小数组,您可以使用json_decode($_POST['arr'], true)然后访问$.post('csv_export/person?filename=export.csv', { arr: JSON.stringify(arr) }); 作为数组。但是当你传递这样的数组时,每个元素都会成为一个单独的post参数,默认情况下PHP只允许1000个参数。您可以在{ arr: arr }中更改此设置,但对于这种情况,使用JSON可能是一种更简单的解决方案。