我是初学者学习Backbone JS,我在将第一个测试模型保存到MySQL数据库时遇到了麻烦。虽然从Backbone发送的AJAX请求具有正确的POST负载(根据浏览器检查器),但后端的PHP脚本似乎正在接收一个空数组。
以下是模型的代码:
var UserModel = Backbone.Model.extend({
urlRoot: 'backboneUserBackend.php',
defaults: {
name: '',
email: ''
}
});
var user = new UserModel(),
userDetails = {name: 'Jim Smith', email: 'jimsmith@example.com'};
user.save(userDetails, {success: function(user){
console.log(user);
}
});
这是我的PHP脚本:
if (!empty($_POST)) {
// @todo: replace deprecated mysql method w/ PDO connection
mysql_connect("localhost", "user", "password");
mysql_select_db("mydatabase");
if (mysql_errno()) {
exit('DB connect error: '.mysql_error());
}
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$query = sprintf("INSERT INTO users VALUES (NULL, '%s', '%s')", $name, $email);
if (mysql_query($query)) {
echo mysql_insert_id();
} else {
exit('Error inserting record: '.mysql_error());
}
}
为了测试我的PHP脚本是否实际上是通过AJAX请求执行的,我将此测试添加到顶部:
$fh = fopen("mytest_".time().".txt", "w");
ob_start();
print_r($_POST);
$payload = ob_get_clean();
fwrite($fh, $payload);
fclose($fh);
每当我保存Backbone模型时,都会创建一个新文件,但该文件包含一个空数组。有什么想法吗?
注意:我正在使用Chrome。另外,我知道我应该在我的Backbone模型中使用一个简单的根URL,例如“/ user”...我只是暂时使用“backboneUserBackend.php”脚本进行测试。
答案 0 :(得分:1)
Backbone会发布您的模型更新JSON编码,而不是正常的application/x-www-form-urlencoded
编码形式,所以如果$_POST
数组有效,我会感到惊讶。 (PHP不是我常用的服务器端语言,因此自上次使用PHP以来,它们可能已经改变了一些东西。)
看起来您的问题的答案可能会在这个问题/答案中找到:Insert Backbone.js model into MySQL database。
答案 1 :(得分:0)
正如@JayC所提到的,Backbone发送的POST数据是请求体中的JSON,而不是参数。你想要做的是:
$data = json_decode(http_get_request_body());
$name = $data->name;
$email = $data->email;
// DB stuff goes here
答案 2 :(得分:0)
其他两个答案确实概述了代码中出现的问题。我建议您使用php微框架(例如Slim)来帮助您使用REST API。我刚刚开始学习骨干,而使用slim已经使服务器端的东西变得轻而易举。
配置slim后,设置路线非常简单:
<?php
require '../lib/Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$api = new \Slim\Slim();
$api->get('/users', function(){ //sql function });
$api->get('/users/:id', function($id){ sql function });
$api->post('/users', 'addUser');
$api->run();
//functions below
?>
我自己就是在做这一切,然后意识到Slim在这个过程中带来了很多麻烦。
例如获取帖子数据:
$user = json_decode($request->getBody());