2013-01-04 50 views
0

我是一名初学者学习Backbone JS,并且在将我的第一个测试模型保存到MySQL数据库时遇到问题。尽管AJAX请求是通过正确的POST有效载荷(根据浏览器检查器)从Backbone发送的,但后端上的PHP脚本似乎正在接收空数组。无法将Backbone JS模型保存到MySQL数据库

下面是该模型的代码:

var UserModel = Backbone.Model.extend({ 
    urlRoot: 'backboneUserBackend.php', 
    defaults: { 
     name: '', 
     email: '' 
    } 
}); 

var user = new UserModel(), 
userDetails = {name: 'Jim Smith', email: '[email protected]'}; 

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()); 
} 
} 

为了测试是否实际上正在通过AJAX请求执行我的PHP脚本,我将此测试添加到顶端:

$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”脚本来进行测试。

回答

1

骨干发布您的模型更新JSON编码,而不是正常形式application/x-www-form-urlencoded编码,所以我会很惊讶,如果$_POST阵列的工作。 (PHP是不是我的正常服务器端语言,所以自从上次我用PHP的工作,他们可能已经改变出头。)

它看起来像回答您的问题可能在此提问/回答中找到:Insert Backbone.js model into MySQL database

+0

谢谢!我改变了它,它运作良好。 – hawkharris

0

正如@JayC所提到的,Backbone发送的POST数据在请求正文中是JSON,而不是参数。你想要做的是:

$data = json_decode(http_get_request_body()); 
$name = $data->name; 
$email = $data->email; 

// DB stuff goes here 
0

其他两个答案大纲了你的代码出了什么问题。我可以建议,你看看使用一个PHP微框架,如Slim,以帮助您的REST API。我最近刚刚开始学习骨干,使用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 
?> 

我在做这一切我自己,然后认识到修身花费的麻烦出的过程。

例如获得这个职位数据:

$user = json_decode($request->getBody()); 
+1

谢谢 - 我会看着苗条! – hawkharris