私はBackbone.jsが新しく、モデルインスタンスを保存しようとしています。 私はサーバーとしてdjangoを使用しています。Backbone.jsモデルデータを保存する。データが正しく送信されない
クライアント側コード:データが送信される前に
var Song = Backbone.Model.extend({
defaults: {
name: 'New Song'
},
url: function() {
return window.location.href;
}
});
var song = new Song()
song.save()
csrfmiddlewaretoken
が正しく設定されています。
Backbone.syncによって内部的に呼び出されたjQuery $ .ajax関数を実行し、モデルオブジェクトに正しいデータが含まれていることがわかりました。
しかし、サーバによって受信request.POST
ではなく、実際のデータの
POST:<QueryDict: {u'[object Object]': [u'']}>
あります。私がどこに間違っているのか?
更新:Backbone.emulateJSON
をtrueに設定して迅速に修正しました。しかし、Backbone(0.9.2)コードのコメントによれば、これは従来のサーバー向けのものです。私はDjango 1.4.1を使用しています。 django 1.4.1と互換性がないということですか?
アップデート2:私はfalse
へBackbone.emulateJSON
を設定すると、私はFirefoxで次のエラーを取得するが、それはクロームで静かに失敗しました。
"[Exception... "Component returned failure code: 0x80460001
(NS_ERROR_CANNOT_CONVERT_DATA)" nsresult: "0x80460001 (NS_ERROR_CANNOT_CONVERT_DATA)"
location: "JS frame :: http://localhost:8000/static/jquery.js :: <TOP_LEVEL> :: line 8214" data: no]"
バックボーンにより好ましいと私は、AjaxのためのjQueryを使用したことだし、それはエラーがjQueryのであるかもしれないようです。
更新3:Backbone.syncで使用されている$ .ajaxを自分自身で上書きして解決しました。それはまだ迅速な修正です。
BACKBONE.JS verson:0.9.2
jQueryのバージョン:1.8.0。 1.7.2でも試しました。同じ結果。
ネットワークパネルを見て、サーバーに送信されているデータを確認できますか。私はDjangoに慣れていませんが、あなたの問題は間違いなくサーバ側の問題であり、Backboneでは問題ではないようです。 – TYRONEMICHAEL
@TyroneMichael提案をいただきありがとうございます。クロムのネットワークパネルは、モデルが要求ペイロードのプレーンオブジェクトとして送信されることを示しています。しかしfirefoxでは、私はUpdate 2で書かれたエラーを受け取りました。 – Pramod
データが文字列として送信されているとは思われません。(見てください。[http://communities.rightnow.com/posts/9580c78607]) Emulate JSONがfalseの場合にこのエラーが発生しますか? Emulate JSON = falseをコメントアウトするとFFで何が起こるのですか? – TYRONEMICHAEL