2

次の問題があります: 私のローカル開発サーバー 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」の 3 つの要素が含まれていることがわかります。

PHPコードには、次のコマンドがあります:

$srvJson = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);

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

$data は上記のように入力されます。通常、最後のステートメントの後に、次の PHP 変数が設定されます。

  • $data["deletedItems"]
  • $data["createdItems"]
  • $data["modifiedItems"]

問題は次のとおりです。実稼働サーバーでテーブルに多くの変更された行 (約 > 30) がある場合、変更されたデータはサーバーに正しく渡されますが、$data["modifiedItems"] が設定されていません。数行のデータセットを変更するだけの場合、 $data["modifiedItems"] は適切に設定されています。データセット全体をピースごとに変更できますが、データセット全体を一度に変更することはできません。

これはサーバー設定の問題だと思いますが、何ですか?

提案をいただければ幸いです。

よろしくお願いします、

ロジャー

PS : 私の英語で申し訳ありません

4

2 に答える 2

1

有効な JSON ではないため ( http://jsonlint.com/で確認)、PHP 5.3.10 と PHP 5.2.13 での json_decode() の結果は異なります。

5.3 は何も返しませんが、5.2.13 は最初の文字列を返します。おそらくあなたのコードのどこかにいくつかのエラー修正があります...

3v4l.orgで、異なる PHP バージョンの異なる結果を参照してください。

data =JSON から削除してもエラーはスローされません。.

于 2013-01-07T10:23:58.663 に答える
0

上記の問題に基づいて、サーバーで次のことを確認できます

または、エンコードとデコードにデフォルトの php json ライブラリを使用できます

これがあなたを助けるかもしれません

于 2013-01-07T10:13:22.923 に答える