首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript和php反序列化中的JSON序列化

问javascript和php反序列化中的JSON序列化
EN

Stack Overflow用户
提问于 2014-10-17 16:57:44
回答 4查看 3K关注 0票数 0

你好,我对在javascript中序列化的JSON的反序列化有问题。我在网页上有表单,每一行都是一个产品(输入、选择、表格中的复选框):

代码语言:javascript
复制
name, price, total_count, ...
name2, price2, total_count2, ...
...

我采用一个表单并使用javascript对其进行序列化(函数ajaxLoad是普通缩短的jQuery函数$.ajax(.)它能在其他地方正常工作)

代码语言:javascript
复制
var form = $('#myForm');

form.submit(function(event){
    event.preventDefault();
    ajaxLoad(
        form.attr('action'),
        form.parent(),
        {jsonData : JSON.stringify(form.serializeArray())}
        );
    });

在php中,接收数据,我的代码如下:

代码语言:javascript
复制
$data = json_decode($jsonData, true);
$this->template->data = print_r($data,1);

它返回的内容如下:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [name] => products[0][cor_projectProduct_name]
            [value] => 1ks Replika Kádnerova jáchymovského tolaru stand BJ
        )

    [1] => Array
        (
            [name] => products[0][url]
            [value] => http://some-nice-url.cz
        )

    [2] => Array
        (
            [name] => products[0][cor_projectProduct_ean]
            [value] => 
        )

    [3] => Array
        (
            [name] => products[0][cor_projectProduct_internalCode]
            [value] => 
        )

    [4] => Array
        (
            [name] => products[0][cor_project_id]
            [value] => 6
        )

    [5] => Array
        (
            [name] => products[0][cor_projectProduct_keywordAllowed]
            [value] => 
        )
...

但是我想要一系列的物体。

我也尝试过用form.serialize序列化表单,但是返回的结果更糟糕--被编码的字符串,我无法解码。

当我尝试通过POST方法作为数组发送数据,然后在php中从$_POST读取数据时,它工作正常,但是由于POST限制而丢失了一些数据,所以最好将其作为序列化字符串发布,但是我不知道如何在php中反序列化它。

编辑: OK,可能解释得很糟糕,因此我需要的是对象数组:

代码语言:javascript
复制
Array
(
    [0] => stdClass Object
        (
            [cor_projectProduct_name] => 1ks Replika Kádnerova jáchymovského tolaru stand BJ
            [url] => http://www.ceske-mince.cz/ceska_mincovna/1997/replika-kadnerova-jachymovskeho-tolaru-stand/
            [cor_projectProduct_ean] => 
            [cor_projectProduct_internalCode] =>
            [cor_project_id] => 6
            [cor_projectProduct_keywordAllowed] =>
            ...
        )
    [1] => stdClass Object
        (
            [cor_projectProduct_name] => 1ks Replika Kádnerova jáchymovského tolaru stand BJ
            ...
        )
    ...

或者与关联数组一样,这并不重要。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-10-20 15:30:34

好吧,我想好了该怎么做:

在javascript中,除数据行外,其他所有内容都必须更改为:

代码语言:javascript
复制
{jsonData : JSON.stringify(form.serialize())}

在PHP中,我可以在调用parse_str()函数之后访问可接受的数据,所以应该如下所示:

代码语言:javascript
复制
public function actionSubmitedImportedProducts($jsonData){
    parse_str(json_decode($jsonData));

    $this->template->data = print_r($products,1);
}

天哪,太逊了:-D.

票数 0
EN

Stack Overflow用户

发布于 2014-10-17 17:16:11

若要获取对象而不是数组,请使用

代码语言:javascript
复制
$data = json_decode($jsonData, true);

而不是

代码语言:javascript
复制
$data = json_decode($jsonData, false);

演示:https://eval.in/207258

票数 2
EN

Stack Overflow用户

发布于 2014-10-17 17:02:31

也许看看这个答案..。

基本上,您可以将数组(在json_decode之后)转换为对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26429906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档