2

我正在使用jQuery 的方法将数据传递给我的php脚本。我将一个非常复杂的JSON对象作为数据传递。在服务器端,我接收变量中的数据,所有数据都转换为 php 格式。 .ajax$_POST

这种转换是如何发生的?它发生在客户端还是服务器端?在这个过程中关联了哪些模块。深入了解完整过程的任何来源。

客户要求:

var data = {
              foo:  123,
              bar:  456,
              rows: [
                      {
                        column1 : 'hello',
                        column2 : 'hola',
                        column3 : 'bonjour',
                      },
                      {
                        column1 : 'goodbye',
                        column2 : 'hasta luego',
                        column3 : 'au revoir',
                      },
                    ],
              test1:{
                      test2: {
                               test3:  'baz'
                             }
                    }
            };

$.ajax({
        type:           'post',
        cache:          false,
        url:            './ajax/',
        data:           data
       });

在服务器端我的'$_POST' var:

Array
(
    [foo] => 123
    [bar] => 456
    [rows] => Array
        (
            [0] => Array
                (
                    [column1] => hello
                    [column2] => hola
                    [column3] => bonjour
                )

            [1] => Array
                (
                    [column1] => goodbye
                    [column2] => hasta luego
                    [column3] => au revoir
                )

        )

    [test1] => Array
        (
            [test2] => Array
                (
                    [test3] => baz
                )

        )

)

此代码片段取自此处

4

3 回答 3

1

Jquery 正在将数据转换为 HTTP 格式。http://en.wikipedia.org/wiki/POST_%28HTTP%29

此链接显示数组是如何编码的:http: //php.net/manual/en/function.http-build-query.php

您可以使用 PHP 本身来生成 HTTP 格式。我将您的数组转换为 PHP 格式:

$data = array(  'foo' => 123,
                'bar' => 456,
                'rows' => array(    0 => array( 'column1' => 'hello',
                                                'column2' => 'hola',
                                                'column3' => 'bonjour'),
                                    1 => array( 'column1' => 'hello',
                                                'column2' => 'hola',
                                                'column3' => 'bonjour')),
                'test1' => array('test2' => array('test3' => 'baz')) );

然后您可以按如下方式生成 HTTP:

echo http_build_query($data);

我得到以下结果:

foo=123&bar=456&rows%5B0%5D%5Bcolumn1%5D=hello&rows%5B0%5D%5Bcolumn2%5D=hola&rows%5B0%5D%5Bcolumn3%5D=bonjour&rows%5B1%5D%5Bcolumn1%5D=hello&rows%5B1%5D%5Bcolumn2%5D=hola&rows%5B1%5D%5Bcolumn3%5D=bonjour&test1%5Btest2%5D%5Btest3%5D=baz
于 2013-03-23T21:12:27.690 回答
1

JSON 是一种通用数据交换格式(适用于支持其规范的所有语言)。JSON 数据由发送它的语言从内存对象编码为 JSON 格式的字符串,并由接收它的语言解码(从字符串到对象)。

谈到 jQuery 和 JavaScript 时,重要的一点是 JSON 的语法看起来类似于 JavaScript,但实际上它比常规 JavaScript 对象的语法更严格(请参阅: JSON 和 JavaScript 对象的区别是什么?)。例如,您在上面发布的 JavaScript 对象文字不是有效的 JSON,因为键和值都没有被引号括起来。此外,从技术上讲,没有 JSON 对象之类的东西。一团 JSON 数据实际上只是用 JavaScript 对象表示法的子集编写的字符串。

因此,PHP 的 json_encode($object) 函数和 jQuery 的 encodeJSON([Object]) 函数会将各自语言的内存对象转换为两种语言(当然还有其他语言)都可以作为数据接受的字符串。PHP 和 jQuery 中的 json_decode($string) 和 parseJSON([String]) 函数分别采用 JSON 字符串并将其作为对象提交到内存中。

于 2013-03-23T21:26:10.050 回答
0

jQuery 将对象数据编码为键值对,例如,如果我们有:

var data = {
          foo:  123,
          bar:  456,
          rows: [
                  {
                    column1 : 'hello',
                    column2 : 'bonjour',
                  },
                  {
                    column1 : 'goodbye',
                    column2 : 'au revoir',
                  },
                ]
           };

jquery 将该对象编码为以下字符串

foo=123&bar456&rows[][column1]=hello&rows[][column2]=bonjour&rows[][column1]=goodbye&rows[][column2]=au+revoir

PHP 会将该字符串转换为一个数组,并根据请求将其分配给 $_GET 或 $_POST 数组。

于 2013-03-23T21:53:19.293 回答