JSON.php解码服务器之间的不同行为

时间:2013-01-04 10:59:11

标签: php json

我有以下问题:在我的本地开发服务器PHP 5.3.10 / Apache 2上,每件事情都是正确的。当我使用生产服务器PHP版本5.2.13 / Apache 2运行相同的代码时,代码会失败,但在某些情况下并非总是如此。

更多详情:

上下文:我在屏幕上有一个可以更新的dojox.data.grid表。修改后的数据作为JSON字符串正确传递给服务器。像这样:

data = {
    "deletedItems":{}
    ,"newItems":{}
    ,"modifiedItems":{
        "2890":{"idFacture":"2890"
                ,"idClient":"175"
            ,"idAffaire":"1323"
            ,"idContrat":"2234"
            ,"raisonSociale":"xxxxxx"
            ,"nomAffaire":"xxxxxx"
            ,"nrFacture":"xxxxx"
            ,"dateFacture":"2012-12-06"
            ,"montantFacture":"160000.00"
            ,"pourcentageFacture":"64.88"
            ,"pourcentageCalcule":"32.44"
            ,"noteFacture":""
            ,"dateTransfert":""
            ,"aTransferer":true
            ,"typeDocument":"Facture"
            ,"factureSoldee":false
            ,"montantTotalHeures":"0.00"
            ,"pourcentageTotalHeures":"0.00"
            ,"montantTotalMateriel":"0.00"
            ,"pourcentageTotalMateriel":"0.00"
            ,"montantTotalSousTraitance":"160000.00"
            ,"pourcentageTotalSousTraitance":"40.94"
    }
    ,"2892":{"idFacture":"2892"
        ,"idClient":"50"
                    ,"idAffaire":"1649"
            ,"idContrat":"2713"
            ,"raisonSociale":"xxxxx"
            ,"nomAffaire":"xxxxx"
            ,"nrFacture":"xxxxx"
            ,"dateFacture":"2012-12-07"
            ,"montantFacture":"12004.50"
            ,"pourcentageFacture":"0.00"
            ,"pourcentageCalcule":"41.94"
            ,"noteFacture":""
            ,"dateTransfert":""
            ,"aTransferer":true
            ,"typeDocument":"Facture"
            ,"factureSoldee":false
            ,"montantTotalHeures":"12004.50"
            ,"pourcentageTotalHeures":"41.95"
            ,"montantTotalMateriel":"0.00"
            ,"pourcentageTotalMateriel":"0.00"
            ,"montantTotalSousTraitance":"0.00"
            ,"pourcentageTotalSousTraitance":"0.00"
        }
    }
}

您可以看到数据包含三个元素“deletedItems”(空),“createdItems”(空)和“modifiedItems”。

在php代码中,我有以下命令:

$srvJson = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);

$data = $srvJson->decode($data);

如上所述填写$ data。通常在最后一个语句之后设置以下PHP变量:

  • $数据[ “deletedItems”]
  • $数据[ “createdItems”]
  • $数据[ “modifiedItems”]

问题是:如果在生产服务器上表中有很多修改过的行(大约> 30),修改后的数据会正确传递给serveur但是$ data [“modifiedItems”]没有设置???如果我只修改几行的数据集,那么$ data [“modifiedItems”]设置得很好。 我可以修改每件的整个数据集,但不能一次修改整个数据集。

我想这是服务器设置的问题,但是什么?

我很感激任何建议。

致以最诚挚的问候,

罗杰

PS:抱歉我的英文

2 个答案:

答案 0 :(得分:1)

由于它是无效的JSON(用http://jsonlint.com/检查),PHP 5.3.10和PHP 5.2.13中json_decode()的结果是不同的!

当5.3返回时,5.2.13返回初始字符串。可能你的代码有一些错误更正......

3v4l.org上查看不同PHP版本的不同结果!

当我们从您的JSON does not throw errors.中移除data =

答案 1 :(得分:0)

根据您的上述问题,您可以检查服务器上的以下内容

或者您可以使用默认的php json库进行编码和解码

愿这会帮到你