0

これは異常なjsonの質問のように思えるかもしれませんが、私の問題に対する答えが見つからなかったことは確かです。

以下のコード例では、取得したいと思います(転送されているjsonデータをデコードする可能性があります。json_decode($ _ POST)を試しました。ちなみに、リクエストタイプはPOSTです。とにかくjsonデータを取得できますか?配列または変数なので、名前または年齢を呼び出したい場合は、リクエストから簡単に取得できますか?

私はbackbone.jsチュートリアルに従っており、これが私のモデルです。

<script type="text/javascript">
        var URL=Backbone.Model.extend({
            initialize: function()
            {
                console.log("URL has been initialized");
            },
            defaults:{
                name:'not defined',
                age:'not defined'
            },
            urlRoot:"/Backbone/manage.php",
            url:function(){
                var base = this.urlRoot || (this.collection && this.collection.url) || "/";
                console.log("Base has been produced");
                if(this.isNew()) return base;

                return base+"?id="+encodeURIComponent(this.id);
            }
        });

        var url=new URL({name:"John",age:10});
        url.save();
    </script>

後で、ネットワークを監視するためにGoogle Chromeを使用し、データがフォームデータとして渡されていることを明確に確認できます。これがGoogleのネットワークツールの結果です。

model:{"name":"John","age":10}
4

2 に答える 2

2

JSON ペイロードを生の投稿データとして取得している場合は、次の方法で読み取ることができます。

json_decode(file_get_contents('php://input'));

$HTTP_RAW_POST_DATAphp.ini 設定でその変数が入力されることを許可している場合は、それを読み取ることもできます。

あなたが得ているものは次のとおりです。

model=%7B%22name%22%3A%22John%22%2C%22age%22%3A10%7D

有効な JSON ではないため、JSON として直接デコードすることはできません。

だから試してください:

parse_str(file_get_contents('php://input'), $post);
$myObject = json_decode($post['model']);
于 2012-05-17T22:59:51.400 に答える
1

model$_POST 配列のキーに対して json_decode を実行する必要があります。キーには、modelデコードする必要がある json 文字列が含まれています。

$modelData = json_decode($_POST['model']);

$modelData->name次に、またはのようなデータにアクセスできます$modelData->age

編集:

これをバックボーンのセットアップに追加してみてください:

Backbone.emulateHTTP = true;
Backbone.emulateJSON = true;

これにより、application/x-www-form-urlencoded代わりにapplication/json. これにより、 $_POST 配列が正しく設定されます。

説明については、こちらを参照してください: http://documentcloud.github.com/backbone/docs/backbone.html#section-162

于 2012-05-17T22:55:01.683 に答える