2011-11-15 7 views
0

私はログインフォームを持っています。このフォームでは、ユーザーはusrname/passwordを入力し、ログインボタンをクリックしてリクエストをサーバーに送信できます。Ajax.UpdateがIE 8で動作しません

ログインボタンはsubmitLoginFormIntoDivAndReloadという名前の関数を呼び出し、submitLoginFormIntoDivAndReload関数はsubmitFormObjIntoDivAndReloadという名前の別の関数を呼び出します。ここで

は、機能の詳細は以下のとおりです。

function submitLoginFormIntoDivAndReload(servletUrl, formObj, divId) { 

//var formObj = document.getElementById(formId); 
var shortUserName = formObj.shortusername.value; 
alert("starting userName: " + shortUserName); 
var organization = formObj.organization.value; 
alert("organization: " + organization); 
formObj.username.value = createLdapString(shortUserName, organization); 
alert("ending userName: " + formObj.username.value); 
var loggingInContent = "<table><tr><td width='600px' align='center'><p>logging in</p></td></tr></table>" 
document.getElementById(divId).innerHTML = loggingInContent; 

submitFormObjIntoDivAndReload(servletUrl, formObj, divId); 

} 

function submitFormObjIntoDivAndReload(url, formObj, divId) { 
alert('Form object: ' + formObj); 
alert('url: ' + url); 
alert('divId: '+divId); 
var myRequest = new Ajax.Updater(divId, url, 
     { method: 'post', 
      parameters: Form.serialize(formObj), 
      onSuccess: function(reponse) { 
       window.location.reload(); 
      } 
     }); 
alert("after update"); 
} 

このコードは、Firefox上で完璧に動作します。ただし、IEでは動作しません。

IEでは、(デバッグ用に)すべてのアラートを取得できます。しかし、Ajax.Updaterはサーバーに要求を送信しないようです(私のサーバー側では出力が見えません)。

FireFoxでは、私もすべての変更を得ることができます。そして私はAjax.Updaterが私のサーバー側で期待される出力を見ることができるので、サーバーに要求を送信することがわかります。

私はオンラインを検索し、誰かがIEのキャッシュの問題があると述べた。 Ajax updater not working in internet explorer をしかし、問題ではない「POST」メソッドのために、唯一の「GET」メソッドのためにあるようです。私は "POST"メソッドを使用しています。私もフォームに偽の入力を追加しましたが、それはまだ動作しません。

誰もが考えていますか?どうもありがとうございました!

ところで、私はプロトタイプ1.5.1を使用しています。

+0

なぜこのような古いバージョンのPrototypeを使用していますか? 1.7はしばらく外に出ており、多くの改良が施されています。 – megaflop

+0

私は1.7に変更されました。それはIEで一度働いた。しかし、それ以上は機能しません。これは本当にキャッシュの問題ですか? – Jing

+0

おそらく。試行する前にブラウザのキャッシュをクリアしようとしましたか?できる場合は、サーバーの応答をキャッシュ防止ヘッダーを送信できますか? 「Cache-Control:no-cache、must-revalidate」と「Expires:Sat、1997年7月26日05:00:00 GMT」はトリックを行うべきである – megaflop

答えて

0

POSTの場合でもGETの場合でも、応答のタイミングはいずれの場合でもかなり近くなります。私はまだサーバーからの応答の前に継続して競合状態が発生していると思います。

競合状態の防止に関しては、this linkを参照してください。私が見つけた多くの解決策の1つは、「ループを設定して10ミリ秒ごとに値をチェックし、そうでなければ待つ」ということです。

+0

これはレースの問題ですか?私は問題が決して送信されなかった要求だと思う(私は私のサーバー側で予想外に見ることができない)。 – Jing

関連する問題