使用jQuery将Javascript数组发送到PHP脚本时,哪个更好:使用JSON还是让jQuery将其转换为查询字符串?

使用jQuery将Javascript数组发送到PHP脚本时,哪个更好:使用JSON还是让jQuery将其转换为查询字符串?,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,我使用jQuery的$.ajax函数和POST方法将javascript数组发送到PHP脚本(AFAIK,GET方法将是类似的): fruits=[ { 颜色:“黄色”, 味道:“酸” }, { 颜色:“蓝色”, 味道:“半甜” }, ] $.ajax({ url:“php/script.php”, 数据:{ 水果:水果 }, 类型:“POST”, }); 发出请求后,PHP中的$\u POST变量将填充以下内容: $\u POST['fruits'][0]['color'] $\u POST

我使用jQuery的
$.ajax
函数和POST方法将javascript数组发送到PHP脚本(AFAIK,GET方法将是类似的):

fruits=[
{
颜色:“黄色”,
味道:“酸”
},
{
颜色:“蓝色”,
味道:“半甜”
},
]
$.ajax({
url:“php/script.php”,
数据:{
水果:水果
},
类型:“POST”,
});
发出请求后,PHP中的
$\u POST
变量将填充以下内容:

$\u POST['fruits'][0]['color']
$\u POST['fruits'][0]['taste']
$\u POST['fruits'][1]['color']
$\u POST['fruits'][1]['taste']
或者,在
$.ajax
函数调用中,我可以将数据作为字符串化JSON发送:

数据:{
水果:JSON.stringify(水果);
},
在这种情况下,数据将作为单个字符串发送(性能增益?),但我必须在PHP中使用
json\u decode()
函数,在
$\u POST['fruits']
参数:

$fruits = json_decode($_POST['fruits']);
使用后,我将能够以类似的方式访问数据:

水果[0]['color']
水果[0][“味道”]
水果[1][“颜色”]
水果[1][“味道”]

我想知道,这些方法是否同样好,或者其中一种更好,以及为什么。提前感谢您分享您的知识:)

在POST上使用JSON是最常见的

原因如下:

  • 查询字符串需要进行URL编码
  • 在QueryString上拥有复杂的数据(例如嵌套对象或嵌套数组)是相当困难的
  • JSON是客户端上的本机对象

    • 更好是一个非常流动的概念。你必须考虑几个因素,我会尝试列出其中的一些。

      可读性: Json格式可读性强,可以很好地映射到后端模型 这可能会帮助你保持一个更好的思维模式

      另一方面,查询字符串的可读性并不差,但看起来不像对象

      性能: 查询字符串内容长度为127字节

      Json内容长度为138字节

      这11个字节的差异可能对大型系统至关重要

      直觉 您的数据交换似乎适合json。
      您发送了一个对象数组,尽管发布起来很容易,就像您展示的那样,但我认为调试和构造起来稍微容易一些。

      JSON更像是一种企业/rest(api)方式。然而,它更现代、更干净、更具活力,这对你来说可能有点过头了

      如果你正在写一篇包含2或3个字符串的简单文章,那就直接写吧。
      需要注意的一点是,只有在您需要的情况下,才可以使用JSON发布空值,因此更多样化的嵌套数据也更容易使用JSON。但是简单的联系人表单不应该为此而烦恼,除非您使用的是Angular之类的工具。

      JSON更好,因为它对于客户端来说更轻;-)@Sundar Bons:虽然我对JSON也有强烈的感情,但我真的想通过一些学术争论来理顺我的感觉;)实际上,您并不是只向服务器发送json编码的字符串。您仍然在使用
      application/x-www-form-urlencoded
      ,这使得整个问题有点过时。这意味着jQuery和php必须对输入/输出进行序列化/反序列化。如果您真的想比较这两种方法,您需要发送一个纯json字符串作为post正文,而不是在服务器端使用
      $\u post
      。IMO json是一个更好的解决方案,可以提高应用程序的可伸缩性。@Yoshi很好。对这些序列化方法进行基准测试将是一个很好的实验。在执行get-requestsecond_点时,QueryString只是url的一部分:这只是一种直觉还是有证据?第三点:这一事实的影响是什么?