PHP< - > JavaScript通信:我坚持使用ASCII吗?

时间:2010-04-22 22:22:17

标签: php javascript json

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

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

谢谢,

2 个答案:

答案 0 :(得分:5)

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

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

JSON的发明正是为了允许通过HTTP连接传输非字符串类型。它就像你将要获得的一样无缝。是否有任何理由担心PHP float和JavaScript Number之间存在序列化 - >字符串 - >解析步骤?

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

答案 1 :(得分:3)

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

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

但最终 - JSON是JSON。

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