5

Backbone と Yii Framework を使用して、最初の RESTful アプリを作成しようとしています。GET メソッドには問題はありませんでしたが、新しい要素を作成するために POST メソッドに行き詰まっています。

Backbone に Comment モデルがあります。

var commentModel = Backbone.Model.extend({

    urlRoot: "index.php/api/comments",
    idAttribute: 'id',

    defaults: {
        content: "Empty comment",
        status: 1
    }
});

私の見解では、相対形式から値を渡す新しいコメントを作成する関数を追加します。

on_submit: function(e) {
            var new_comment = new Comment({author_id: this.$('#author_text').val(), content: this.$('#content_text').val(), post_id: this.$("#post_text").val(), status: this.$("#status_text").val()});

         new_comment.save();
        },

Firebug でリクエストを見ると、問題ないようです。[POST] タブで、すべての値を確認できます。

JSON            
author_id "7"   
content "Epic fail"
post_id "7" 
status "2"

Source 
{"content":"Epic fail","status":"2","author_id":"7","post_id":"7"}

しかし、私のphp Apiでは、 $_POST 変数は空です!

foreach($_POST as $var=>$value) {

     if($model->hasAttribute($var))
        $model->$var = $value;
     else
        $this->_sendResponse(500);
}

誰にもいくつかのアイデアがありますか?Backbone.Sync のドキュメントを読んで、作成要求に POST を使用する必要があることを理解しています。

以下から値を取得する回避策を見つけました。

file_get_contents('php://input') 

しかし、idは私には適切ではありません...

ありがとう。

4

1 に答える 1

10

Backbone.sync のドキュメントから、

デフォルトの実装では、Backbone.sync がモデルを保存するリクエストを送信すると、その属性が渡され、JSON としてシリアル化され、コンテンツ タイプが application/json の HTTP 本文で送信されます。

つまり、通常の形式の投稿のようにパラメーターでデータを受信するのではなく、HTTP 応答の本文でデータを受信します。

この動作に対処するには、次の 3 つのオプションがあります。

  1. サーバー コードを変更して REST 要求を理解します。たとえば、Backbone.js モデルを MySQL データベースに挿入するを参照してください。
  2. Backbone.emulateJSONがニーズに応えられるかどうかを確認する
  3. Backbone.syncを上書きし、サーバーに合わせてデータを送信します
于 2012-08-02T10:25:53.967 に答える