Подтвердить что ты не робот

Подача нормальной формы против JSON

Я вижу преимущества получения ответа JSON и форматирования на стороне клиента, но есть ли какие-либо преимущества при использовании JSON для отправки формы по сравнению с обычной подачей?

4b9b3361

Ответ 1

Одна вещь приходит на ум, когда дело с данными POST - бесполезное повторение:

Например, в POST мы имеем это:

partners[]=Apple&partners[]=Microsoft&partners[]=Activision

Мы действительно можем видеть, что здесь много повторений, где, когда мы отправляем JSON:

{"partners":["Apple","Microsoft","Activision"]}

59 символов по сравнению с 47. В этом небольшом примере это выглядит незначительно, но эти сбережения могут увеличиваться и увеличиваться, и даже несколько байтов сэкономит вам некоторые данные. Разумеется, происходит разбор данных на стороне сервера, что может привести к различиям, но, тем не менее, я видел, что это иногда помогает при работе с более медленными соединениями (смотря на вас, 3G и EDGE).

Ответ 2

Вероятно, это зависит от вашего приложения на стороне сервера. Обычно вы отправляете данные на серверы с помощью POST, поэтому как вы форматируете данные подчеркивания, зависит от того, как вы хотите, чтобы ваш сервер обрабатывал его. POST предоставляет некоторую форму протокола key- > value, в то время как в JSON вы можете добавить больше. Вы также можете перенести json с помощью GET, поместив его в URL-адрес.

Вы должны посмотреть на json как способ записи данных, в то время как обычная подача с помощью POST должна дать вам просто способ передачи данных (конечно, вы можете использовать функцию key- > value для заказа своих данных).

Существуют протоколы поверх HTTP, которые могут помочь вам определить интерфейс для вашего веб-приложения. Одним из хороших примеров является RESTfull http://en.wikipedia.org/wiki/Representational_state_transfer

В частности, для отправки форм я не вижу никаких преимуществ, для этого в первую очередь был разработан POST. Есть случаи, когда вы хотите передавать не только данные из формы, но и некоторые метаданные, в этом случае json может помочь вам путем кодирования данных формы (с метаданными) в некотором json-формате, но в конце вы будете все еще злоупотреблять POST для передачи эти данные json.

Надеюсь, я ответил на ваш вопрос.

Ответ 3

Я не вижу никаких очевидных преимуществ для подачи основной формы. Но когда дело доходит до обработки сложных структур, вы начнете понимать преимущество организации своих данных.

Итак, если у вас есть простая форма контакта (имя, адрес электронной почты, сообщение), придерживайтесь обычной формы POST ing. Но подумайте о том, чтобы представить полное CV пользователя, например, очень неприятно обрабатывать огромное количество переменных на серверной стороне script.

Вот пример использования JSON с PHP

//Here are the submission data
{
    "personalInformation": {
        "name": "hey",
        "age": "20"
    },
    "education": {
        "entry1": {
            "type": "Collage",
            "year": "2012"
        },
        "entry2": {
            "type": "Highschool",
            "year": "2010"
        }
    }
}

$CV_Data = json_decode($_POST['json_form'], true);
$CV_Data['personalInformation']['name'];
$CV_Data['personalInformation']['age'];
//Or you can loop
foreach($CV_Data['education'] as $entry){
   $entry['type'];
   $entry['year'];
}

Как вы можете видеть, использование JSON упрощает работу с вашими данными.

Ответ 4

Я на самом деле борюсь с той же проблемой. В моем случае использования требуется, чтобы потенциально сложное дерево было отправлено на сервер. Некоторые структуры могут декодировать двумерные массивы в качестве атрибутов формы (Spring WebMVC - это тот, который я знаю). Тем не менее, это только поможет вам в конкретном случае, когда вы отправляете вложенный массив. Врожденный характер пары имя-значение делает его непригодным для передачи дерева более одного уровня. Раньше я использовал хаки, такие как отправка JSON с URL-кодировкой в ​​качестве значения атрибута:

val0=%7B%22name%22%3A%22value%22%7D&val1=something&val2=something+else

Однако этот подход становится грязным и трудно отлаживается, когда объект становится более сложным. Кроме того, многие фреймворки предоставляют инструменты, которые автоматически отображают сообщение JSON для объектов (например, Jackson for Java), кажется, не следует использовать эти инструменты.

Таким образом, в конечном счете выбор зависит от сложности отправляемого объекта. Если объект ограничен одним уровнем глубины, используйте прямую пару имя-значение; если объект является сложным и включает глубоко вложенное дерево, используйте JSON.

Ответ 5

Я не видел упоминания о подаче файла, поэтому я думал, что буду звонить. FormData - это стандартный способ отправки файлов на сервер через AJAX. Я не встречал никаких решений с помощью JSON, но может быть способ сериализации/десериализации файлов...