2011-10-20 14 views
11

backbone.jsでモデルを保存しています。 PUTがサーバーに送信され、応答が返されます。私が初めてそれを行うとき、最初にレスポンスがモデルに追加されたので、それは成功を返します。次のエラーが返されます。モデルを保存して良い応答を得るには

BACKBONE.JSでの保存機能:

saveCountry: function() { 
    this.model.save({},{ 
     success: function(model, response) { 
      console.log('success! ' + response); 
     }, 
     error: function(model, response) { 
      console.log('error! ' + response); 
     } 
    }); 
    this.render(); 

    return false; 
}, 

PHPは、JSON文字列を返します。

{"response": "Model saved!"} 

'応答' がモデルに追加されているため、レスポンスとしてエラーが出るのをPUT次のとおりです。

Unknown column 'response' in 'field list' 

なぜ応答がモデルに追加され、それを防止するのですか?モデルsaveのバックボーンのドキュメントから

+0

条件付きで、あなたのPHPスクリプトで「応答」をスキップできませんでしたか? – swatkins

+0

私はできましたが、サーバー側が応答を決定するようにするのがよりクリーンであると思いました。 – GijsjanB

+0

"クライアント"側を意味しますか? – swatkins

答えて

7

は、モデルのハッシュ属性を設定し、サーバーにモデルを同期します。 サーバが異なる属性ハッシュを返す場合、モデルの状態 が再度設定されます。 それを動作させるために何をすべきかhttp://documentcloud.github.com/backbone/docs/backbone.html#section-41

:{「応答」:「モデルを保存!」}返さないサーバから。内容のない成功(ステータス200)を返すだけです。

セーブがうまくいかなかった場合は、エラーのあるJSONを返します。バックボーンは、指定したJSONを使用してモデル上でエラーイベントを発生させます(http://documentcloud.github.com/backbone/docs/backbone.html#section-41およびhttp://documentcloud.github.com/backbone/docs/backbone.html#section-145を参照)。ただ、古代のスレッドを復活させる

6

...

あなたが戻ってサーバから取得する応答を変更することが必ずしも望ましい/ことはできません。

もう1つの解決策は、モデルのparseをオーバーライドしてこれを処理することです。あなたの状況では、あなたのモデルのすべてに対して応答が不適切な場合は、スーパークラスでそれを行うことができます。

関連する問題