AJAXフォームを作成していて、JSONで3つのフィールドを送信しようとしています。
クライアント側では、フォームはシリアル化され、JSON形式で入力されます。
$('#form-signin').live('submit', function(event) {
var target = $('#ajax');
var url = '/ajax/user/authenticateLevel2';
$.ajax({
type: "POST",
url: url,
data: $.base64.encode($('#form-signin').serialize()),
dataType: 'json',
success: function(data, status) {
$.getJSON(url, function(data) {
$('#ajax').html($.base64.decode(data.html));
$('#ajax').modal();
});
}
});
event.preventDefault();
});
サーバー側では、ルーターがURLリクエストを分割し、最初の部分に「ajax」が含まれていることを確認してから、ルーティングリクエストをAJAXハンドラーに特別に渡します。
私の問題は、ルーターの内部でさえ$_REQUEST
、投稿に関する情報を取得するために使用されるチェックを行っても、投稿データがそこにないことです。同じことが。にも当てはまり$_POST
ます。
リクエストがヒットした最初のページ(index.php)でさえ、$_REQUEST
データがありません。
私は何が間違っているのですか?
サーバ側、
リクエストは、オートローダーとinitスクリプトを含むindex.phpに送信されます。
initスクリプトは、データベース接続を初期化し、エラー、例外、およびセッション処理を設定してから、要求をルーターに渡します。
ルーターは、その構築方法で、URLを配列(展開$_SERVER['REQUEST_URI']
)として設定してから、関連するコントローラー、メソッド、および追加のパラメーターを設定します。
この場合、ajaxリクエストを実行しているため、リクエストをディスパッチする前に特別な処理が行われます。
メソッドパラメータは次のように設定されます。
$requestParams = $_REQUEST;
unset($requestParams['url']);
このリクエストパラメータは、追加情報(URL、コントローラ、メソッド、データベースオブジェクト)とともにディスパッチに渡されます。
すべての場合において、主に次の方法を使用してディスパッチします。
$dispatchedController = new $this->controller($this->database);
$method = $this->method;
return $dispatchedController->$method($this->params);