【问题标题】:Can't Save Backbone JS Model to MySQL Database无法将 Backbone JS 模型保存到 MySQL 数据库
【发布时间】:2012-12-18 11:53:31
【问题描述】:

我是一名学习 Backbone JS 的初学者,我在将我的第一个测试模型保存到 MySQL 数据库时遇到了麻烦。虽然 AJAX 请求是从 Backbone 发送的带有正确的 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”脚本,用于测试目的。

【问题讨论】:

    标签: php mysql backbone.js


    【解决方案1】:

    Backbone 发布您的模型更新 JSON 编码,而不是普通形式的 application/x-www-form-urlencoded 编码,所以如果 $_POST 数组有效,我会感到惊讶。 (PHP 不是我常用的服务器端语言,所以自从我上次使用 PHP 以来,它们可能已经改变了一些东西。)

    您的问题的答案似乎可以在以下问题/答案中找到:Insert Backbone.js model into MySQL database

    【讨论】:

      【解决方案2】:

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

      $data = json_decode(http_get_request_body());
      $name = $data->name;
      $email = $data->email;
      
      // DB stuff goes here
      

      【讨论】:

        【解决方案3】:

        其他两个答案确实概述了您的代码中出了什么问题。我可以建议您考虑使用 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());
        

        【讨论】:

        • 谢谢 - 我会调查 Slim!
        猜你喜欢
        • 2021-01-25
        • 1970-01-01
        • 1970-01-01
        • 2012-08-18
        • 2021-12-17
        • 2017-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多