1

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

3 に答える 3

1

ずっと前にプラグインを使用したことを思い出すと、メソッド$ .base64.encode()は単一の文字列を返すため、おそらくサーバーに送信するのは、値のない単一のパラメーターのようなものです。

私はあなたが次のようなことをするべきだと信じています

data: "foo=" + $.base64.encode($('#form-signin').serialize()),
于 2012-12-24T16:06:35.137 に答える
0

コードは機能するはずです(たとえば、HTMLがここで問題ではないと仮定する'#form-signin'と、適切なフォームの適切なセレクターになります)。

サーバー側でデータを取得できないとのことですが。ただし、クライアントから必要なデータを送信していることを絶対に確信していますか?たとえば、Firebugなどのツールを使用してリクエストを分析しましたか?

于 2012-12-24T15:44:26.710 に答える
0

jsonをサーバーに送信するのはbase64でエンコードされた文字列だけではありません。また、キー/ペアの値を期待しています。キー/ペアの値を送信するには、シリアル化されたフォームデータを$.ajax関数に渡すだけです。

$('#form-signin').live('submit', function(event) {
    var target = $('#ajax');
    var url = '/ajax/user/authenticateLevel2';
    $.ajax({
        type: "POST",
        url: url,
        data: $('#form-signin').serialize(),
        dataType: 'json',
        success: function(data, status) {
            $.getJSON(url, function(data) {
                $('#ajax').html($.base64.decode(data.html));
                $('#ajax').modal();
            });
        }
    });
    event.preventDefault();
});
于 2012-12-24T16:12:51.420 に答える