2012-05-01 10 views
4

次の理由により、IEではリダイレクトループが発生しますが、ChromeやFirefoxではリダイレクトループは発生しません。 (そのことについてに行くか、それを行う方法最善の私に助言しようとしない、それは問題ではないのです)、その後の記事をJavascript IEリダイレクションループ(一部のPHPの場合)

<?php 
if (isset($_POST['a']) OR strlen($_POST['a'])>0) 
    { 
    die($_POST['a']); 
    } 
?> 
<html> 
<head> 
<script type="text/javascript" src="fpjs2.js"></script> 
</head> 
<body> 
<form name="fbif" id="fbif" action="checkcookie.php" method="POST"> 
<input type="hidden" name="a" value="" /> 
</form> 
<script> 
var ec = new MyObject(); 
ec.get("fbuid", function(value) { 
    document.fbif.a.value=value; 
    document.fbif.submit(); 
}); 
</script> 
</body> 
</html> 

スクリプトがcheckcookie.phpと呼ばれ、それがクッキーの存在をチェックこれは同じスクリプトに戻ります。一番上のPHPは、何かがポストされているかどうかを検出しなければなりません。ポスト変数を表示して終了する(スクリプトの残りの部分をロードしない)場合。

ChromeとFirefoxでは、これは完全に機能します。 IEでは、それは無限にリダイレクトされます。つまり、IEは変数をポストしているのではなく、何度も何度も繰り返し読み込んでいるようです。

+0

MyObjectとec.getは何をしていますか? –

+0

私はそれを書いていないので、私が知らないことがたくさんあります。もう少しテストした後で、これがec.getなしでは起こらないことを確認できるので、何とか問題を引き起こしています。しかし、それはフォームを提出するように頼まれていない場合、リダイレクトされません。さらに、別のページにフォームを送信しようとしても、それはループ内でまだ更新されます。 – Alasdair

+0

私の最高の推測では、そのオブジェクトのコードには、値を持たない 'value'という特定のバグがあるということです。関数の先頭に 'alert(value)'を実行し、その中で何が設定されているのかを確認してください。値に値がない場合、MyObject()を修正する必要があります –

答えて

0

私の意見では、IEでは "a"変数はポストされていませんが、フォームのポストを作るべきだと思います。だから問題はあなたのjavascriptとIEとの互換性にあると思う。

私はフォームを投稿しないようにしようとしますが、値が返されるかどうかを確認しようとします。alert(value);で返信するか、submit関数にコメントし、入力に値があるかどうかを確認してください。

EDIT:isset($_POST['a']) OR strlen($_POST['a'])>0 =>isset($_POST['a'])これは、strlen($ _ POST ['a'])> 0の場合と全く同じ効果があり、isset($ _ POST ['a'])もtrueになります。

+1

これらは同じ効果がありません。しかしこれは 'if(empty($ _ POST ['a']))'です。 –

関連する問題