我试图了解Backbone.js、Slim PHP和Paris/Idiorm如何协同工作,但我无法完成流程,从模型属性数据开始,一直到数据库。问题:当我执行 model.save() 时,究竟什么会发送到我的服务器?
客户端: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 数据,因为它是新的。它将它发送到路由的 /donut,但我的问题是它发送了什么?以及以什么格式?我想要的结果是将这些甜甜圈属性保存到我的数据库中。我可以使用 jQuery $.post() 将这个服务器端代码传递给这样的 json ...
var myDonut = {"name":"Jelly Filled", "sparkles":false, "creamFilled":true};
$.post('http://localhost/donut', myDonut);
...它很乐意接受它,将其保存到我的数据库中。但是在当前设置尝试发送我的主干甜甜圈数据时,我收到 POST 500 Internal Server Error。下面我有一些服务器端代码。
服务器端:Slim PHP w/ Paris
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
});
我觉得答案就在那里,但我看过的每个例子似乎都缺少一块或另一块拼图,我无法得到“啊哈!” 片刻。如果这是一个非常无知的问题,我提前感谢您并道歉。:-P
跟进/编辑:1
你能粘贴错误信息吗?
我在当前状态下收到 POST http://localhost:8888/donut 500 (Internal Server Error)。我可以使用以下代码获取更多信息。
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);
}
});
现在,当我运行骨干网的 save() 时,我仍然收到 500 错误,还有 XMLHttpRequest 作为我的 FAIL 响应。来自 XMLHttpRequest 的唯一显着线索是 responseText = SQLSTATE[23000]:完整性约束违规:1048 列“名称”不能为空。
所以我的猜测是,要么 1)我在 save() 上搞砸了,因为它没有正确捕获我的属性,2)它目前正在以我的服务器无法识别的格式发送我的属性标准 $app->request()->post() Slim 方法(当我尝试直接使用 $_POST 访问时似乎也没有多大作用),3)我的服务器没有正确设置以获取那种数据正在发送。
尽管我不知道该怎么做,但我注意到的另一件事是,当我添加
echo $_POST;
它返回给我一个空数组。仍然给我失败。但是,如果我这样做...
echo json_encode($_POST);
它给了我一个成功,响应是 []。里面什么都没有。显然我的 POST 数据仍然不稳定。