0

私はバックボーン JS を学習している初心者で、最初のテスト モデルを MySQL データベースに保存するのに問題があります。バックボーンから 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);

バックボーン モデルが保存されるたびに、新しいファイルが作成されますが、ファイルには空の配列が含まれています。何かご意見は?

注: Chrome を使用しています。また、Backbone モデルでは "/user" などの単純なルート URL を使用する必要があることもわかっています... テスト目的で一時的に "backboneUserBackend.php" スクリプトを使用しています。

4

3 に答える 3

1

バックボーンは、通常の形式のエンコーディングではなく、JSON でエンコードされたモデルの更新を投稿する ため、配列が機能application/x-www-form-urlencodedした場合は驚くでしょう。$_POST(PHP は私の通常のサーバー側言語ではないため、前回 PHP を使用したときから何かが変更されている可能性があります。)

あなたの問題に対する答えは、この質問/回答にあります: Insert Backbone.js model into MySQL database .

于 2013-01-04T03:36:52.297 に答える
0

@JayCが述べたように、Backboneが送信するPOSTデータは、パラメーターとしてではなく、リクエスト本文のJSONです。あなたがしたいことは次のとおりです。

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

// DB stuff goes here
于 2013-01-04T04:07:46.877 に答える
0

他の 2 つの回答は、コードで何が問題になっているのかを概説しています。REST API を支援するために、Slimなどの php マイクロフレームワークの使用を検討することをお勧めします。最近バックボーンの学習を始めたばかりで、スリムを使用することでサーバー側の作業が簡単になりました。

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());
于 2013-01-04T05:31:44.417 に答える