1

我在 Jquery 中创建一个 JSON 数组,然后将其发送到 php。在 php 中我对其进行解码,但我收到一条错误消息。下面是到达 php 的数组的回显和错误消息。注意:我只传递了一项(以使其更小,但在进一步的数组中会有更多项:

在此处输入图像描述

这是当前的 PHP 代码:

    print_r($_POST['cropData']);
    $cropData = json_decode($_POST['cropData']);
    print_r($cropData);

这里也是生成 json 数组的 jquery:

      jsonArray[thumbNum] = [{'src':val.attr('src')},
                            {'width':val.width()},
                            {'height':val.height()},
                            {'dataCX':val.attr('data-cx')},
                            {'dataCY':val.attr('data-cy')},
                            {'dataCW':val.attr('data-cw')},
                            {'dataCH':val.attr('data-ch')}
      ]
      thumbNum++;
    }

    $.post('scripts/php/join_processing.php', {
      'cropJoin': '1',
      'cropData': jsonArray},               
      function(data) {

关于我在这里做错了什么有什么建议吗?我是在发送格式错误的 JSON 数组还是未正确编码?

谢谢

4

4 回答 4

0

因为jQuery.post()的数据参数是“智能猜测”,所以如果你在 jQuery.post() 中传递 JSON 字符串或 JS 对象作为数据参数,它已经将其作为 HTTP POST 数组发布而不是单个 json 字符串。所以,你在 php 中收到的已经是一个可用的数组,所以不需要解码它。

顺便提一句; 您可以很容易地看到这一点,因为您 print_r 是 POST 变量,并且它显然将其打印为数组而不是字符串。

于 2012-09-18T23:15:28.327 回答
0

你不需要解码它 - 它已经是一个数组。所以请随意使用它。

$.post将其作为数组传递,而不是作为 json 字符串传递。

于 2012-09-18T23:11:43.223 回答
0

JavaScript 中的数组与 PHP 中的数组不同。您可能不是要发送一个 JS 数组,而是一个 JS 对象(它将变成一个 PHP 数组)。

请尝试使用此代码...

jsonArray[thumbNum] = {
  src: val.attr('src'),
  width: val.width(),
  height: val.height(),
  // ..
};

虽然将大致像这样转换为 php 对象:

array(
  array(
    "src" => "",
    "width" => "",
    "height" => ""
  ), array(
    "src" => "",
    "width" => "",
    "height" => ""
  )
);

其他海报也是正确的,您实际上并不需要json_decode所有内容,因为 $.post 会为您正确转换它。

于 2012-09-18T23:14:13.820 回答
0

您实际上并没有在那里创建 JSON 数组。JSON 是一种可以表示数组的字符串表示法。您实际上是在创建一个常规的 JavaScript 数组。$.post将正确地将其传递给您的 PHP 脚本,以便$_POST正确填充。json_decode根本不需要。

于 2012-09-18T23:14:34.500 回答