1

この問題は、コードイグナイター固有のものである可能性が非常に高いです。

ビューとの間でリダイレクトする redirect.php というコントローラーがあります。_remapほとんどの場合、このコントローラーには、case ステートメントですべてのリダイレクトを行うパブリック関数が 1 つあります。$.POSTビューからコントローラーに送信するまで、すべてがうまく機能しています。_remap をヒットして、リクエストが AJAX から来ているという事実を探して、それを実行したいのです。

IS_AJAX私はチェックしている定数を持っています。

define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');

しかし、ページにアクセスするたびに、常にデフォルトに再マッピングされ、リクエストがそのページに送信されます。そこでは、データをエコーし​​て前後に警告しているときに、基本的にそのページのデータが返されます。

洞察はありますか?

参考のため、

redirect.php (変数を定義するコードとさらに 2 つのケースがありますが、それらにヒットしていません。「インデックス」/デフォルトにヒットしています)

 public function _remap($method)
        {   

    switch ($method) {
        case $method == 'index':
        $this->load->view('main');
            break;
        case $method == 'IS_AJAX':
        var_dump($_POST);
            break;
        default:
        $this->load->view('main');
            }
        }

tweetview.php (redirect.php 内の別のケースでリダイレクト コントローラーによって読み込まれたビュー、json_tweets send は JSON 変数)

//jquery

$.post("http://localhost/2fb/index.php/redirect", {'json_tweets': json_tweets},
   function(data) {
     alert(data);
   });
4

3 に答える 3

2

これをすべて行う代わりに、 http://codeigniter.com/user_guide/libraries/input.html$this->input->is_ajax_request()から頼ることができます。ライブラリのロードに興味がない場合は、ここに、少なくとも過去 2 年間、私が本番環境で使用している類似のコードを示します。

$ajax = ($_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest')? true : false;

文字列を見てください XMLHttpRequest。jQuery はフロントエンドの JS ツールキットです。

さらに付け加えると、私は通常、Ajax 呼び出し用のエントリ ポイントを 1 つ持っているので、明らかに ajax 用のコントローラーを 1 つ持っていて、すべての呼び出しをそこにルーティングします。なぜ私はそれをするのですか?単純な理由として、JS がオフになっている場合、すべてのフォームがサーバーで単純な非 ajax フォーム ハンドラーに送信されるようにします。JS がオンの場合、jQuery/prototype/YUI が制御を取り、データを ajax コントローラーに送信します。すべての検証/検証/db 相互作用を実際に行う終了ハンドラーは、共通のコードです。

于 2011-08-02T17:50:59.010 に答える
1
case $method == 'IS_AJAX':

あなた$methodIS_AJAXこのURLではありません:

http://localhost/2fb/index.php/redirect

これによりredirect、メソッドなしでコントローラーに移動します(デフォルトは「インデックス」になります)。文字通り必要になります:

http://localhost/2fb/index.php/redirect/IS_AJAX

...そこに足を踏み入れcaseます。定数 と要求されたメソッドを混同しているIS_AJAXようですが、チェック時に正しく使用しているようですindex(ただし、これはケースと同じdefaultであるため、冗長です)。

$method、または の最初のパラメーターに付けた名前は_remap()、常に、呼び出されるルーティング コントローラー関数になります。

編集:これについては以前に言及しませんでしたが、switch ブロックは渡された式を評価するため、手動で比較を行う必要はありません。例:

switch ($method) {
    // case $method === 'index':
    case 'index':
        $this->load->view('main');
    break;
}
于 2011-08-02T17:57:46.790 に答える
0

これを試して 、

    $.ajax({
        type: "POST",
        url: "your function url goes here",
        data: data,
        success: function(html){
              window.location = 'redirect url goes here';
        }
   });
于 2011-08-02T17:44:26.703 に答える