Backbone.js,とParis/Idiormがどのように機能するかを理解しようとしていますが、モデル属性データから始めて、データベースに至るまで問題:model.save()を実行すると、正確に何が私のサーバーに送られるのですか?Slim phpとParisを使用してバックボーンモデルデータをDBにPOSTする方法
クライアント側:BACKBONE.JS
var Donut = Backbone.Model.extend({
defaults: {
name: null,
sparkles: false,
creamFilled: false
},
url: function() {
return '/donut';
}
});
var bostonCream = new Donut({
name: 'Bawston Cream',
sparkles: true,
creamFilled: true
});
bostonCreme.save(); // <-- Problem: Not sure what & format this is sending
私は上記の私の主な問題だと思います。私の理解では、バックボーンはデフォルトで、POSTデータを新しいものから送信することを知っています。それは経路指定された/ドーナツに送られますが、私が持っている質問は何ですか?どのフォーマットで?私が望む結果は、それらのドーナツ属性を私のDBに保存することです。私は...)(このサーバー側のコードに
var myDonut = {"name":"Jelly Filled", "sparkles":false, "creamFilled":true};
$.post('http://localhost/donut', myDonut);
を、この使用してjQueryの$ .postのようなJSONを渡すことができます...そして、それは喜んで私のそれをデータベースに保存し、それを取ります。しかし、現在の設定でバックボーンのドーナツデータを送信しようとすると、POST 500 Internal Server Errorが発生します。私はいくつかのサーバー側のコードがあります。
サーバー側:私は答えを感じている/パリワットスリムPHP
class Donut extends Model {}
$app->post('/donut', function() use ($app) { // Slim framework routes my POST...
$donuts = Model::factory('Donut')->create(); // Paris stuff...
$donuts->name = $app->request()->post('name'); // Slim request parameters...
$donuts->sparkles = $app->request()->post('sparkles');
$donuts->creamFilled = $app->request()->post('creamFilled');
$donuts->save(); // Paris... Save name, sparkles, and creamFilled to my DB
});
はそこにあるが、私は見てきたすべての例では、1つのパズルのピースまたは他の欠落しているようだと、私はそれを得ることができません "ああ!瞬間これが本当に無知な質問であれば、事前に感謝し、謝罪します。/EDIT :-P
フォロー:1
あなたはエラーメッセージを貼り付けることはできますか?
現在の状態でPOST http://localhost:8888/donut 500(内部サーバーエラー)が表示されます。私は次のコードでより多くの情報を得ることができます。私は背骨のsave()を実行したときに
bostonCream.save({}, { // REPLACE bostonCream.save();
success: function(model, response) {
console.log('SUCCESS:');
console.log(response);
},
error: function(model, response) {
console.log('FAIL:');
console.log(response);
}
});
今、私はまだ私のFAIL応答として500エラーだけでなく、XMLHttpRequestのを取得します。 XMLHttpRequestの唯一の顕著なヒントはresponseText = SQLSTATE [23000]です。整合性制約違反:1048 'name'列をnullにすることはできません。
私の推測では、1)私の属性を正しくキャプチャしていないという点で、save()を使って何かをしゃがんでいる、2)現在私のサーバがisn '標準の$ app-> request() - > post()で認識してください。スリムな方法($ _POSTで直接アクセスしようとするとあまり効果がないようです)、3)サーバーが正しく設定されていない送信されるデータの種類。私はそれを作るために何を知っていませんが、私は気づいた
もう一つは、私が
echo $_POST;
を追加したときにそれは私には空の配列を返すことです。まだ私にFAILを与えます。しかし、私はこれをすれば...
echo json_encode($_POST);
それは私にSUCCESSを与え、応答は[]です。そこには何もありません。明らかに、私のPOSTデータは依然として不安定です。
あなたは元気です!それは質問+答えのためのプラスです。ありがとう! –
こんにちは、私はBackboneとSlimを使って同じ問題に苦労しています。あなたのリクエストに応じてpost()やput()を使う方が適切なのに対し、getBody()を使う必要がありますが、非常に奇妙です。 – Maarten
SlimでJSONを解析することができます。それでもgetBody()を呼び出す必要があります。リクエストのpost()メソッドは、ContentTypeミドルウェアが行った構文解析を尊重せず、フォームデータのみを扱うように見えます。 $ appをインスタンス化したら、次のようにします:$ app-> add(new \ Slim \ Middleware \ ContentTypes()); //受信したJSONを解析します。その後、getBody()は解析されたデータの素敵な配列を返します。 –