Вставьте модель Backbone.js в базу данных MySQL

У меня есть модель backbone.js с некоторыми значениями по умолчанию и URL:

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

Теперь я хочу сохранить эту модель в базе данных MySQL с помощью PHP-скрипта & quot; save.php & quot; она выглядит следующим образом:

<?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!";

Я пытался прочитать много учебников, но я не могу заставить эту простую модель сохранить для работы. Почему мой код не работает? Любые идеи о том, как это можно решить?

Спасибо

EDIT: QUICK SOLUTION

В сценарии 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());

Таким образом, одна строка будет вставлена в таблицу «коробки» с информацией о каждом из атрибутов базовой модели Box. Метод запроса к серверу в этом случае - это POST и идентификатор в таблице «коробки». установлен на автоинкремент.

 danwellman07 июн. 2012 г., 13:30
Вы видите сообщение вставлено? Может вы видите, что делается запрос к файлу php? ты вообще получаешь ответ?
 Johannes Klauß07 июн. 2012 г., 13:28
почему вы не сохраняете JSON в одно поле? Было бы расширяемым. Или лучший способ - использовать базу данных на основе документов, такую как CouchDB или MongoDB, где данные уже сохранены в формате JSON.

Ответы на вопрос(2)

Решение Вопроса

Backbone основан на REST API: при сохранении / обновлении модели на сервере Backbone отправит ее сериализованную как JSON в теле запроса сPOST нашPUT запрос. ОтДокументация Backbone.sync

With the default implementation, when Backbone.sync sends up a request to save a model, its attributes will be passed, serialized as JSON, and sent in the HTTP body with content-type application/json.

Это означает, что на стороне сервера вы должны

determine the type of request decode the serialized 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();

Проверьте эту страницу для более полной реализации REST API в PHPhttp://www.gen-x-design.com/archives/create-a-rest-api-with-php/

 07 июн. 2012 г., 14:45
@rpabonbox.save() отправляетGET запрос? Очень странно. Вы можете прочитать сериализованный JSON сfile_get_contents('php://input') но это не сработает сGET, Можете ли вы проверить с помощью Firebug или Chrome Inspector, что отправляет ваш браузер (параметр запроса, параметры публикации, тело запроса)?
 07 июн. 2012 г., 14:57
@rpabonheader('Location: ./save.php'); перенаправляет запрос, теряя тип запроса и JSON, поэтому у вас естьGET и ничего больше. Вернитесь к предыдущей версии, измените ее с помощью моего кода и проверьте ответ. Он будет недействительным для Backbone, но, по крайней мере, вы увидите что-то.
 rpabon07 июн. 2012 г., 14:52
Сейчас я использую тот же код, который я опубликовал в вопросе, а затем добавил заголовок & lt;? Php ('Location: ./save.php'); ? & gt ;, поэтому я могу с помощью этого увидеть метод запроса и JSON в браузере, я не знаю, может ли это повлияет на результат.
 rpabon07 июн. 2012 г., 14:39
Спасибо @nikoshr, однако мне все еще не удается сохранить модель в базе данных. Я попытался хотя бы посмотреть, что сервер получает, используя регистр переключения на request_method и сохраняя результат в переменной, но я ничего не вижу, единственное, что я знаю, это то, что метод запроса - GET. Можете ли вы предоставить простой код, в котором по крайней мере я могу иметь доступ к отправляемому объекту JSON? Благодарю.

Вы забыли отправить ID.

// $ id = $ _POST [& apos; cid & apos;];

enter image description here

Сделайте Id для AUTO_INCREMENT и удалите из кода:

$id = $_POST['cid'];

mysql_query("INSERT INTO boxes (x, y, w, h)
                         VALUES('$x', '$y', '$w', '$h')
                       ") or die(mysql_error());

Ваш ответ на вопрос