我有一个带一些默认值和url的bone.js模型:
var Box = Backbone.Model.extend({ url: "./save.php", defaults: { x: 0, y: 0, w: 1, h: 1 } });
然后,我有此模型的一个实例,然后继续保存它:
var box = new Box({ x:10, y:10, w:200, h:200 }); box.save();
现在,我想使用PHP脚本“ save.php”将此模型保存到MySQL数据库中,如下所示:
<?php include('connection.php'); $id = $_POST['cid']; $x = $_POST['x']; $y = $_POST['y']; $w = $_POST['w']; $h = $_POST['h']; mysql_query("INSERT INTO boxes (id, x, y, w, h) VALUES('$id', '$x', '$y', '$w', '$h') ") or die(mysql_error()); ?> echo "Data Inserted!";
我尝试阅读许多教程,但无法保存此简单模型。为什么我的代码不起作用?关于如何解决的任何想法?
谢谢
编辑:快速解决方案
在php脚本中,从发送的JSON对象获取信息的正确方法如下:
$box_data = json_decode(file_get_contents('php://input')); $x = $box_data->{'x'}; $y = $box_data->{'y'}; $w = $box_data->{'w'}; $h = $box_data->{'h'};
并存储在数据库中:
mysql_query("INSERT INTO boxes(id, x, y, w, h) VALUES('', '$x', '$y', '$w', '$h') ") or die(mysql_error());
这样,将在表“框”中插入一行,其中包含主干模型框的每个属性的信息。在这种情况下,服务器请求方法是POST,并且表“ boxes”中的ID设置为自动递增。
骨干是基于REST API:当保存/更新模型到服务器,骨干会发送与请求体序列化为JSON POST我们的PUT请求。从Backbone.sync文档
POST
PUT
使用默认实现时,当Backbone.sync发送保存模型的请求时,其属性将被传递,序列化为JSON,并在HTTP正文中使用内容类型application / json发送。
这意味着您必须在服务器端
这样的事情应该让你开始
$request_method = strtolower($_SERVER['REQUEST_METHOD']); $data = null; switch ($request_method) { case 'post': case 'put': $data = json_decode(file_get_contents('php://input')); break; } // print_r($data); // note that mysql_* functions are deprecated // http://php.net/manual/en/function.mysql-query.php // inserting with a PDO object, assuming an auto incremented id $sql = "INSERT INTO boxes (x, y, w, h) VALUES(?, ?, ?, ?)"; $sth = $dbh->prepare($sql); $sth->execute(array( $data->x, $data->y, $data->w, $data->h )); $id = $dbh->lastInsertId();
检查此页面,以在PHP http://www.gen-x-design.com/archives/create-a-rest-api-with- php/中更全面地实现REST API 。