3

Backbone がどのように機能し、バックエンド コードと通信するかを理解しようとしてきましたが、php ファイルに送信した JSON を受信できないという問題があります。

コードは次のとおりです。 HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link href='http://fonts.googleapis.com/css?family=Abel' rel='stylesheet' type='text/css' />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Understanding Backbone</title>
<style type="text/css">
body { padding: 0; margin: 0; background-color: #fff; }

h2 { font-family: Abel, sans-serif; margin: 0; padding: 0 0 5px 0;}
input { background-color: #ddd; border: 0; }
input:active { background-color: #bbb; }

#new-status { margin: 20px; padding: 20px; background-color: #67A9C3; }
#statuses { margin: 20px; padding: 20px; background-color: #92B456; }

</style>
</head>

<body>

<div id="new-status">
<h2>New monolog</h2>
<form>
    <textarea id="status" name="status"></textarea>
    <br />
    <input type="submit" value="Post" />
</form>
</div>

<div id="statuses">
    <h2>Monologs</h2>
    <ul></ul>
</div>
<script src="js/jquery-min.js"></script>
<script src="js/underscore.js"></script>
<script src="js/backbone.js"></script>
<script src="js/main.js"></script>
</body>
</html>

JS:

var Status = Backbone.Model.extend({
    url: 'api/index.php'
});

var Statuses = Backbone.Collection.extend({
    model: Status
});

var NewStatusView = Backbone.View.extend({
    events: {
        "submit form": "addStatus"
    },

    initialize: function(options) {
        this.collection.on("add", this.clearInput, this);
    },

    addStatus: function(e) {
        e.preventDefault();

        this.collection.create({ text: this.$('textarea').val() });
    },

    clearInput: function() {
        this.$('textarea').val('');
    }
});

var StatusesView = Backbone.View.extend({
    initialize: function(options) {
        this.collection.on("add", this.appendStatus, this);
    },

    appendStatus: function(status) {
        this.$('ul').append('<li>' + status.escape("text") + '</li>');
    }
});

$(document).ready(function() {
    var statuses = new Statuses();
    new NewStatusView({ el: $('#new-status'), collection: statuses });
    new StatusesView({ el: $('#statuses'), collection: statuses });
});

index.php:

<?php

echo(var_dump($_POST));

?>

これは私が応答のために得るものです:

配列(0) { }

私はこれについて頭を悩ませてきたので、助けてください!

4

2 に答える 2

3

stackoverflow (awesome community btw) についてさらに調査した結果、バックボーンがストレート ポストを送信したり、RESTful API にアクセスしたり、コード ビハインドが何であれ、代わりにヘッダーのセットであることがわかりました。したがって、 $_SERVER グローバルを調べて、何が要求されているかを調べる必要があります。$_SERVER["REQUEST_METHOD"] でリクエストを見つけることができ、そのリクエストで何をしたいかを決定するためにスイッチ/ケースを実行します。送信されるデータ (バックボーンの場合は常に JSON 文字列) は HTTP 本文にあり、それを取得するために file_get_contents('php://input') を使用し、JSON をデコードして PHP が動作できるようにします。 .

<?php 
$requestMethod = $_SERVER["REQUEST_METHOD"];     
switch ($requestMethod) 
{ 
case 'POST': $data = json_decode(file_get_contents('php://input'), true); 
echo $data; 
break; 
} 
?>

@orangewarp、RESTful php フレームワークを使用せずに、ボンネットの下で何が起こっているのかを本当に理解したかったのです。

于 2012-08-29T15:43:41.437 に答える
0
$raw_data = file_get_contents("php://input");
var_dump($raw_data);
if( !empty($raw_data) ){
    $data = @json_decode($raw_data, true);
    if( $data ){
        var_dump($data);
    }
}
于 2012-08-29T13:37:55.630 に答える