【问题标题】:How to store a javascript array in PHP session?如何在 PHP 会话中存储 javascript 数组?
【发布时间】:2012-05-29 16:03:45
【问题描述】:

我的 javascript 函数中有一个数组,其中包含 1、2、3、4 等字符串值。 我想将此数组存储在 PHP 的会话中。我搜索了它,他们说要使用 JSON,但我正在了解如何使用 JSON。

假设我的数组名称是:myArray 我想做这样的事情:$_SESSION['myArray'] = myArray;

有没有办法做到这一点?如果可能,请提供一些工作代码示例。

【问题讨论】:

  • 你的意思是,但我没有了解如何使用 JSON
  • json 只是 javascript 对象/数组的字符串表示形式(即:(J)ava(S)cript (O)bject (N)otation)。只需将 json 字符串分配给会话 var,就像任何其他 var 一样。
  • JSON 实际上是更简单的选择...
  • 我不知道如何为此目的使用 JSON。如何将数组存储到其中以及如何从中接收。我在 Javascript 和 PHP 方面工作不多。

标签: php javascript json session client-server


【解决方案1】:

您的 JavaScript 在客户端上运行,您的 PHP 在服务器上运行。您需要通过 HTTP 发送数据。

要将数据从 JavaScript 数组获取到 PHP 会话,您需要:

  1. 对数据进行序列化(可以是表单中的输入集合,也可以是字符串。只要您没有 JSON 不支持的数据类型,JSON object 可以帮助处理后者)。
  2. 将数据发送到 PHP(通过提交表单或使用 Ajax)
  3. 用 PHP 读回数据(可能来自$_POST
  4. 可选择将其反序列化回数据结构
  5. 存储在$_SESSION

【讨论】:

  • 感谢您的帮助。请告诉我从 Javascript 向 PHP 发送数据的方法。我的意思是如何从 Javascript 提交表单?
  • reference_to_form_in_dom.submit()
【解决方案2】:

编码 JSON 对象到 php(关联)数组的方法是使用:json_encode(JS_OBJECT_WHICH_IS_STRINGIFIED)。要解码 JSON 对象,请使用json_decode(PHP_ASSOC_ARRAY)

例如:

$arr = json_encode('{a:"b"}');  // will give $arr = ['a': 'b']
$js_object = json_decode($arr); // will return '{a:"b"}'

【讨论】:

  • 你混合了这些功能。加上你的 JSON 字符串是错误的('a' 周围的引号丢失)。它是这样工作的:$phpArray = json_decode('{"a":"b"}', true); $jsonAgain = json_encode($phpArray);
【解决方案3】:

这取决于你想要完成什么。

如果您只是想在 PHP 中存储来自 JavaScript 的内容,那么它会为 PHP 中的字符串文字分配数组的 JSON 表示形式。

如果您想要实际操作数组数据,那么您需要编写代码,从 JavaScript 解析数组,将其保存在内存中,然后再写出一些包含您的数组的 JavaScript 代码。这个过程称为序列化/反序列化。我在.net 中工作,.net 框架包含执行这些任务的内置类;我认为您的框架很可能也是如此。

【讨论】:

    【解决方案4】:

    您应该将 JSON 编码的 JS 数组传递给一个 php 文件(通过 ajax 或简单的形式),然后使用 json_decode() 对其进行解码;最后将其保存在会话中。 因此,首先,在您的 JS 代码中添加如下内容:

    var json_text = JSON.stringify(your_array, null);
    

    然后,将json_text 传递给您的 PHP 文件,这样您就可以像这样保存它:

    $_SESSION['myArray'] = json_decode($_POST['json_string']);
    

    当然$_POST['json_string'] 取决于您为参数指定的名称。

    【讨论】:

      【解决方案5】:

      查看 json_encode 和 json_decode。基本上使用json_decode 将javascript 数组转换为php 数组,而json_encode 则相反。

      【讨论】:

        【解决方案6】:

        将 myArray 转换为 json:

        var s = "[" = myArray.join + "]"
        

        这只有在 myArray 包含不需要引号的东西时才有效,例如整数或浮点数。

        您可以使用一些 javascript 框架来抽象化将值转换为脚本中的 json 的问题,不记得名称,但我听说它们可能是值得的。另一方面,这并不比您在上面看到的要难很多,具体取决于您处理的是哪种价值观。

        获取 json 到服务器:

        document.getElementById("someHiddenElement").value = s;
        

        那么你的服务器端 php 就可以将值保存在 session 中了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多