正常表单提交与JSON

时间:2012-08-20 17:48:04

标签: json post

我看到在客户端获取JSON响应和格式化的优势,但与正常提交相比,使用JSON表单提交是否有任何优势?

5 个答案:

答案 0 :(得分:12)

在处理POST数据时,有一件事是无用的重复:

例如,在POST中我们有:

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

我们实际上可以看到,这里有很多重复,就像我们发送JSON一样:

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

59个字符与47个。在这个小样本中它看起来微乎其微,但这些节省可能会上升,甚至几个字节也可以节省一些数据。当然,在服务器端有解析数据,这可以解决差异,但我仍然看到这有时有助于处理较慢的连接(看着你,3G和EDGE)。

答案 1 :(得分:6)

我没有看到任何文件提交的提及所以我认为我会插话.FormData似乎是通过AJAX向服务器提交文件的标准方式。我没有遇到任何使用JSON的解决方案,但可能有一种方法来序列化/反序列化文件......

答案 2 :(得分:5)

这可能取决于您的服务器端应用程序。您通常使用POST将数据发布到服务器,因此如何格式化下划线数据取决于您希望服务器如何处理它。 POST提供了某种形式的key-> value协议,而在JSON中你可以提供更多。您也可以使用GET将json放入url。

您必须将json视为数据写入的方式,而使用POST进行的正常提交应该只为您提供传输数据的方式(当然,您可以滥用它的key-> value功能来订购数据)

HTTP上存在协议,可以帮助您定义Web应用程序的界面。一个很好的例子是RESTfull http://en.wikipedia.org/wiki/Representational_state_transfer

特别是对于提交表单,我没有看到任何优点,POST是首先为此设计的。在某些情况下,您不仅要传输来自表单的数据,还要传输一些元数据,在这种情况下,json可能会通过以某种json格式编码表单数据(带元数据)来帮助您,但最后您仍将滥用POST进行传输这个json数据。

希望我回答你的问题。

答案 3 :(得分:2)

我认为基本表单提交没有任何明显的优势。但是,在处理复杂结构时,您将开始意识到组织数据的优势。

因此,如果您有一个简单的联系表单(姓名,电子邮件,消息),请使用正常的表单POST。但是考虑提交完整用户的简历,在服务器端脚本中处理大量变量非常烦人。

以下是使用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 :(得分:1)

我实际上正在努力解决同样的问题。我的用例要求将可能复杂的树发布到服务器。一些框架能够将二维数组解码为表单属性(Spring WebMVC是我所知道的)。即便如此,这只会在您发送嵌套数组的特定情况下帮助您。名称 - 值对的固有性质使其不适合传输多于一层的树。在过去,我使用了像发送URL编码的JSON作为属性值的黑客:

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

然而,当对象变得更复杂时,这种方法变得混乱并且难以调试。此外,许多框架提供了自动将JSON表单发布到对象的工具(例如:Jackson for Java),似乎没有利用这些工具。

所以最终,选择取决于您发送的对象的复杂性。如果对象被限制在一个深度,请使用直接名称 - 值对;如果对象很复杂并涉及深度嵌套的树,请使用JSON。