Связь с PHP <-> JavaScript: я застрял с ASCII? - PullRequest
0 голосов
/ 23 апреля 2010

Я передаю много данных между PHP и JavaScript. Я использую JSON и json_encode в php, но проблема в том, что я передаю много чисел, хранящихся в виде строк, например, таких как 1.2345.

Есть ли способ передать данные напрямую в виде чисел (с плавающей точкой, целых чисел) и не преобразовывать их в ASCII, а затем обратно?

Спасибо

Ответы [ 2 ]

5 голосов
/ 23 апреля 2010

Нет. HTTP - протокол байтового потока (*); все, что идет вниз, должно быть упаковано в байты. Вы можете, конечно, использовать более компактное упакованное двоичное представление значений, но ваш PHP будет гораздо больше работать для кодирования, а ваш JS - для декодирования.

Во всяком случае, для обычного случая малых чисел текстовые представления имеют тенденцию быть очень эффективными. Ваш пример 1.2345 на самом деле меньше строки (6 байт), чем число с плавающей запятой двойной точности (8 байт).

JSON был придуман именно для того, чтобы можно было передавать нестроковые типы через HTTP-соединение. Это так легко, как вы собираетесь получить. Есть ли веская причина для беспокойства, что между PHP float и JavaScript Number?

был шаг serialise-> string-> parse

(* представлен JavaScript как символьный протокол, поскольку JS не имеет байтового типа данных. Установив кодировку ответа JSON в iso-8859-1, вы можете заставить его работать так, как если бы это были чистые байты, но по умолчанию utf-8 обычно больше подходит.)

3 голосов
/ 23 апреля 2010

Если вы не хотите использовать JSON, есть другие варианты кодирования. Данные, возвращаемые из HTTP-запроса, являются потоком октетов (а не 7-битным чистым потоком ASCII - если бы это было так, не было бы возможности сервировать документы или двоичные файлы в кодировке UTF-8, как простые примеры счетчиков). *

Некоторыми двоичными протоколами сериализации / данных являются ASN.1, Thrift, Google Protocol Buffers, Avro или, конечно, некоторый пользовательский формат. Преимущество JSON заключается в «единой понятной человеку простоте».

Но, в конце концов, JSON - это JSON.

Возможно, кому-то интересно: Реализация буфера протокола JavaScript

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...