【问题标题】:PHP <-> JavaScript communication: Am I stuck with ASCII?PHP <-> JavaScript 通信:我是否坚持使用 ASCII?
【发布时间】:2011-02-11 07:16:52
【问题描述】:

我在 PHP 和 JavaScript 之间传递大量数据。我在 php 中使用 JSON 和 json_encode,但这里的问题是我传递了很多存储为字符串的数字 - 例如,像 1.2345 这样的数字。

有没有办法将数据直接作为数字(浮点数、整数)传递,而不必将其转换为 ASCII 然后再返回?

谢谢,

【问题讨论】:

  • ?我不明白这个问题。 Javascript 没有类型,那么如何将变量传递为浮点数、整数等?
  • @echox - OP 询问他是否可以直接转移 Number。当然这是不可能的,即使是 JSON 格式也会是字符串。

标签: php javascript json


【解决方案1】:

没有。 HTTP是字节流协议(*);任何发生故障的东西都必须打包成字节。如果你愿意,你当然可以使用更紧凑的二进制值表示,但是 PHP 编码和 JS 解码的工作量要多得多。

无论如何,对于小数字的常见情况,文本表示往往非常有效。您的示例 1.2345 实际上比双精度浮点数(8 个字节)更小的字符串(6 个字节)。

JSON 的发明正是为了允许通过 HTTP 连接传输非字符串类型。它与您将获得的一样无缝。有什么好的理由关心 PHP float 和 JavaScript Number 之间有一个 serialise->string->parse 步骤吗?

(* 作为字符协议暴露给 JavaScript,因为 JS 没有字节数据类型。通过将 JSON 响应的字符集设置为 iso-8859-1,您可以使其像纯字节一样工作,但默认 utf-8通常更合适。)

【讨论】:

    【解决方案2】:

    如果您不想使用 JSON,还有其他编码选项。从 HTTP 请求返回的数据是八位字节流(而不是 7 位干净的 ASCII 流——如果是,则无法提供 UTF-8 编码文档或二进制文件,作为简单的反例)。

    一些二进制序列化/数据协议是 ASN.1、Thrift、Google Protocol Buffers、Avro,当然还有一些自定义格式。 JSON 的优点是“统一的人类可读的简单性”。

    但归根结底——JSON 是 JSON。

    也许有人感兴趣:JavaScript Protocol Buffer Implementation

    【讨论】:

    • JSON 是 JSON 是我最喜欢 JSON 的地方!
    猜你喜欢
    • 2013-06-06
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    相关资源
    最近更新 更多