【问题标题】:Sending array from javascript to php not working correctly将数组从 javascript 发送到 php 无法正常工作
【发布时间】:2011-02-02 00:20:23
【问题描述】:

我正在以这种方式在 jquery 端创建一个数组。该数组是一个数组数组,其中每个元素都是一个类似于[jskey, jsvalue] 的数组。

    var jsarray = [];
//  jsarray.push([jskey, jsvalue]);
    jsarray.push([1, 123]);
    jsarray.push([2, 98]);
    jsarray.push([3, 107]);
    jsarray.push([4, 34]);

然后我在提交之前将数组添加到表单的元素中

$('#myform input[name=jsvalues]').val(jsarray);

在 php 方面,我希望收到一个数组数组,但是当我执行 print_r() 或 var_dump() 时得到的只是一个看起来像这样的字符串

string() "1,123,2,98,3,107,4,34" 

【问题讨论】:

  • 您仍在使用 HTTP。您的表单输入只能包含一些文本字符串,不能包含任意结构化的对象。 JavaScript 或 jQuery 足以尝试以某种方式将该数组序列化为一串文本,它可能只是对你大喊大叫。考虑对数组进行 JSON 编码并在 PHP 中对其进行解码,或者直接按原样使用它,因为您可以使用一两行 PHP 代码轻松将该字符串转换回数组。

标签: php javascript jquery arrays


【解决方案1】:

属性值是字符串。当您将数组转换为字符串时,您会将该数组中的每个元素转换为字符串并用逗号分隔(除非您覆盖 toString() 方法(提示:不要)。

我建议将数组转换为 JSON,然后将其分配给表单控件。然后您可以在 PHP 中解析 JSON。

http://json.org 在底部有指向 JSON 序列化器/反序列化器的 PHP 和 JS 实现的链接。

【讨论】:

    【解决方案2】:

    David Dorward 给出了一个非常好的解决方案。 为了澄清一点,当您将复杂对象(如数组)分配给 HTML 元素的属性时(这是 jQuery 在调用 val() 时所做的),该对象将转换为字符串(通过调用对象的 toString 方法)。

    数组有一个 toString 方法,该方法完全符合您的要求:数组中的值列表,以逗号分隔:

    [1, [2, 3]].toString(); // returns "1,2,3"
    

    要传输复杂的对象,可以使用 JS 原生的 JSON(JavaScript Object Notation):

    $('#myform input[name=jsvalues]').val(JSON.stringify(jsarray));
    

    在服务器端,PHP 5 有一个非常快的 JSON API:

    $jsvalues = json_decode($_POST['jsvalues']);
    

    【讨论】:

      【解决方案3】:

      假设它们都是对的,您可以将该字符串转换回数组数组:

      $arr = explode(",", $_POST['jsvalues']);
      $jsvalues = array();
      for ($i = 0; $i < count($arr); $i += 2) {
          $jsvalues[] = array($arr[$i], $arr[$i + 1]);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-14
        • 2017-06-17
        • 1970-01-01
        • 2015-10-27
        • 2017-08-22
        • 2017-03-06
        相关资源
        最近更新 更多