Backbone Sync返回一个空的$ _POST数组

Ing*_*gro 5 javascript php rest yii backbone.js

我正在尝试使用Backbone和Yii Framework完成我的第一个RESTful应用程序.我对GET方法没有任何问题,但是我现在卡在POST方法中,以创建一个新元素.

我在Backbone中有一个评论模型:

var commentModel = Backbone.Model.extend({

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

    defaults: {
        content: "Empty comment",
        status: 1
    }
});
Run Code Online (Sandbox Code Playgroud)

在我看来,我添加了一个函数来创建一个新的Comment传递相对形式的值:

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();
        },
Run Code Online (Sandbox Code Playgroud)

用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"}
Run Code Online (Sandbox Code Playgroud)

但是在我的php Api中,$ _POST var是空的!

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

     if($model->hasAttribute($var))
        $model->$var = $value;
     else
        $this->_sendResponse(500);
}
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?阅读Backbone.Sync的文档我明白它应该使用POST来创建请求.

我找到了一个解决方法来获取以下值:

file_get_contents('php://input') 
Run Code Online (Sandbox Code Playgroud)

但是对我来说身份不合适......

谢谢.

nik*_*shr 10

Backbone.sync文档,

使用默认实现,当Backbone.sync发送保存模型的请求时,其属性将被传递,序列化为JSON,并在HTTP主体中使用content-type application/json发送.

这意味着您不会在常规表单帖子中的参数中接收数据,而是在HTTP响应的正文中.

您有三种方法可以处理此行为:

  1. 修改服务器代码以了解REST请求,例如,请参阅将Backbone.js模型插入MySQL数据库
  2. 看看Backbone.emulateJSON是否能满足您的需求
  3. 覆盖Backbone.sync并发送数据以更好地适应您的服务器