2012-01-31 5 views
2

私は、フォームを扱うことができるポップアップボックス(jQuery付き)を作成しようとしています。そのほとんどは、すべて動作しています。私が持っている唯一の問題は、成功したログインおよび/または登録で、PHPがヘッダーの場所を送信してユーザーに "自宅"にリダイレクトされ、フォームにロードされたdivにリダイレクトの無限ループが作成されることです。

locationヘッダーが投稿要求に送信され、新しいlocationとして送信されている実際のURLを取得する場合は、どうすれば読むことができますか?

これは私が(他のものの間で)これまでに試してみましたです:

$('.register').live('submit', function(e) { 

    e.preventDefault(); 

    var form_data = $(this).serialize() + '&register=register&js=true'; 

    $.post(site_path + '/register', form_data, function(data, text, xhr) { 

     alert(xhr.getResponseHeader("Location")); 

     // $('.overlay_container').html(data); 

    }); 

}); 

ない私が間違ってやっている正確に何をしてください、しかし、私の知る限りでは、これらの線に沿って何かが動作するはずです。また、期待通りの結果が得られないプレーンなAJAX投稿要求でこれをやってみました。

ちょうど、場所のヘッダーは送信されません。場合にのみ、誰かがログインに成功、レジスタなど

理想的には、これは私が達成しようとしているものです:限り

$('.register').live('submit', function(e) { 

    e.preventDefault(); 

    var form_data = $(this).serialize() + '&register=register&js=true'; 

    $.post(site_path + '/register', form_data, function(data, text, xhr) { 

     var header_location = xhr.getResponseHeader("Location"); 

     if(header_location == null) { 

      $('.overlay_container').html(data); 

     }else{ 

      window.location = header_location; 

     } 

    }); 

}); 
+1

:ここ

は、最終的な結果は次のようになります! '.on()'を使う。あなたのバージョンのjQueryで '.on()'が利用できない場合は、 '.delegate()'を使います。 – Tadeck

+0

@Tadeckもともと私は '.on()'を使ってみましたが、うまくいきません。私はGoogleのCDNの1.7.1を使用しています。私が知る限り、それはそこに(1.7のように)含まれなければならないが、うまくいかない。 http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js –

+0

'.on()' **は1.7以降**含まれており、間違いなく動作します。さらに、 '.on()'は '.live()'と '.delegate()'の両方を完全に置き換えることができ、それらより優れており、それらを置き換えることを意図しています。あなたが間違って使っているか、他の間違いをしているようです。 – Tadeck

答えて

1

私は承知しています、あなたが実際にはJavaScriptとしてLocationヘッダーを読み取ることができませんそれらが停止するまで続き、headersを送ります。つまり、最初に投稿されたページではなく、リンク先ページのヘッダーを取得します。

したがって、JavaScript(またはjQuery)を使用してページがリクエストされた場合、PHPスクリプトでリダイレクト機能を編集してカスタムヘッダーを送信しました。

public function redirect($redirect = NULL) { 

    global $_CONFIG; 

    if($_POST['js'] == 'true') { 

     exit(header('Redirect: ' . $_CONFIG['site']['path'] . '/' . $redirect)); 

    }else{ 

     exit(header('Location: ' . $_CONFIG['site']['path'] . '/' . $redirect)); 

    } 

} 

リダイレクトが実際に送信されたかどうかを確認して、JavaScript(jQuery)の終わりで正しく処理することができます。あなたはすべての回で `jQuery.liveを()`使用しないでください

$('.popup').on('submit', '.register', function(e) { 

    e.preventDefault(); 

    var action = $(this).attr('action'), form_data = $(this).serialize() + '&register=register&js=true'; 

    $.post(action, form_data, function(data, text, xhr) { 

     var header_location = xhr.getResponseHeader('Redirect'); 

     if(header_location == null) { 

      $('.overlay_container').html(data); 

     }else{ 

      window.location = header_location; 

     } 

    }); 

}); 
+1

私の経験では、Locationヘッダーを持つものは自動的にブラウザーに続くものではありません。私はちょうどテストをして、最初のレベルの応答を受けました。 –

関連する問題