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

时间:2012-08-02 09:15:43

标签: php javascript rest backbone.js yii

我正在尝试使用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
    }
});

在我看来,我添加了一个函数来创建一个新的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();
        },

使用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 var是空的!

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

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

任何人都有一些想法?阅读Backbone.Sync的文档我明白它应该使用POST来创建请求。

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

file_get_contents('php://input') 

但是我觉得对我不合适......

感谢。

1 个答案:

答案 0 :(得分:10)

来自Backbone.sync documentation

  

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

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

您有三种方法可以解决此问题:

  1. 修改服务器代码以了解REST请求,例如,请参阅Insert Backbone.js model into MySQL database
  2. 查看Backbone.emulateJSON是否能满足您的需求
  3. 覆盖Backbone.sync并发送数据以更好地适合您的服务器