2011-01-11 10 views
10

リクエストがajaxかどうかを確認する必要があります。 $request->isXmlHttpRequest()はうまくいきますが、実行中のどこかにリダイレクトがあると、このメソッドはfalseを返します。この場合、リクエストがajaxであるかどうかをどのように確認できますか? p.s. ajaxはjQueryによって開始されます

答えて

8

プロジェクト内の別のアプリケーションにリダイレクトされていない場合や、別の外部URIが最初のリクエストでisXmlHttpRequestがtrueの場合は、代わりにforwardを使用してください。 X-Requested-withヘッダの値に対して及びヘッダ(またはすべてのオリジナルヘッダ)いくつかのブラウザの実装で


よく、その方法チェックがリダイレクトされた要求(いずれかを命名するFF)から/上書き落とされます。

回避策として、リクエスト自体に変数を使用できます。既存のsf_formatインフラストラクチャを使用することは可能かもしれませんが、内部での動作に慣れていないため動作するかどうかはわかりません。

+0

まさに、Firefoxは責任があります。 Operaで同じことがテストされ、うまく動作します。 – Dziamid

+0

@Dziamid:ええ、バグがありましたが、FF4リリースを見逃してしまったので、修正される前に少なくとも4.1になるでしょう。また、他のブラウザがあるかもしれませんが、これは他のブラウザを認識していません。だから私はあなたの回避策でそれを慎重に演奏するだろう。実際には、可能であれば、方程式からすべてリダイレクトを削除する可能性があります。 – prodigitalson

+0

私はそれに対して私の頭を禁止しているが、役に立たない。明らかに、カスタムリクエストパラメータをリクエストオブジェクトに設定しても、リダイレクトではわかりません。 sf_formatの使用は複雑です(symfonyはindexSuccess.sf_format.phpのような異なるテンプレートを探します)。 – Dziamid

2

あなたが簡単な回避策が必要な場合は、私はあなたが「AJAX」という隠しフィールドを作成することができます投稿している場合

は、http://mywebsite.com/loadsomething.php?ajax=true

$isAjax = $request->getParameter('ajax'); 

のようなURLを使用するかを示唆しています。もちろん、これらはあなたの問題を永遠に解決することはできませんが、できるだけ早くこの問題が必要な場合は迅速な修正として機能します。

リダイレクトを1つしかサポートしない場合は、フラッシュ変数も作成できます。

そうしないと、あなたはsymfonyのソースコードを見ることができます:ライン518で

http://trac.symfony-project.org/browser/branches/1.4/lib/request/sfWebRequest.class.php 

あなたはリクエストオブジェクトは、HTTPヘッダからアヤックスされる要求を識別し確認することができます。したがって、リダイレクト後に同じHTTPヘッダーが正しく設定されていない理由を調べる必要があります。

+0

は@prodigitalson(別の回答を見てください)のように、サービスブラウザによって消去されるためです。この問題はSymfonyとは関係ありません。 – Dziamid

+0

いいえ、私はそれがSymfonyとは関係がないとは言いませんでした。私はどこで問題を追い始めるのかだけ言った。 – Aston

6

いくつかのJSライブラリはジュストスクリプトでこれを追加し、ヘッダにXmlHttpRequestの値を送信しません:

xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");