2012-09-18 137 views
1

我在Jquery中创建JSON文件,然后将其发送到php。在PHP我解码,但我收到一条错误消息。下面是到达php和数组的错误消息的回声。注:我只通过一个项目(以保持它小,但在进一步的将有数组中的多个项目:jquery + php - 使用JSON数组

enter image description here

这是当前的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数组或不编码它科尔ectly?

thx

+0

JSON.stringify(your_array); – donutdan4114

+0

@ donutdan4114:为什么? – zerkms

+0

@zerkms:如果您想通过POST传递JSON字符串。 – donutdan4114

回答

0

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

Btw;你可以很容易地看到这个,因为你print_r的POST变量,它显然打印它作为一个数组而不是一个字符串。

0

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

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

0

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

试试这个代码,而不是...

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

虽然将转化为一个PHP对象roughtly这样的:

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

其他海报是你真的不ALSO权需要json_decode的一切,因为$ .post会为你正确转换它。

0

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