2009-03-16 28 views
0

私はドロップダウンを持つページを持っています。 onchangeイベントは、データを取得して​​3210を生成するAjaxブロックを含むJavascript関数(下)を呼び出します。表面上、すべてが機能します。繰り返しリクエストでAjaxコールが応答しない

リスト内の項目を問題なく選択できます。しかし、以前に選択されたアイテムを選択すると、Ajaxコールがハングアップするように見えます。多分奇妙なキャッシングの問題か何かのように見えます。ブラウザを閉じてページをリロードすると、再選択するまですべてのアイテムが再び機能します。

私が掛かっているときにはreadyStatestatusのプロパティをテストしましたが、何も得られません。何か不足していますか?

このページは認証の背後にあるクライアントプロジェクトであるため、URLを投稿することはできませんが、ここにはAjaxコードがあります。これはPHPページにありますが、これに関連するPHPスクリプトはありません。

function getText(id) { 
var txt = document.getElementById("MyText"); 

txt.disabled = "disabled"; 
txt.innerText = ""; 
txt.className = "busy"; 

var oRequest = zXmlHttp.createRequest(); 
oRequest.open("get", "get_text.php?id=" + id, true); 
oRequest.send(null); 

oRequest.onreadystatechange = function() { 
    if(oRequest.readyState == 4) { 
     if(oRequest.status == 200) { 
      txt.innerText = oRequest.responseText; 
     } else { 
      txt.innerText = oRequest.status + ": " + oRequest.statusText; 
     } 

     txt.disabled = ""; 
     txt.className = ""; 

     oRequest = null; 
    } 
}} 

編集:コードブロックは少し風変わりなようです。以前の同じ行にない限り、最終的に}を含めることはできません。

答えて

1

からFiddler2をダウンロードすることができます。長い時間がかかる場合(サーバーに行く場合など)、コールバックを呼び出すまでに時間がかかるため、これはおそらく機能します。

ページがキャッシュされている場合、ブラウザはおそらくsendメソッドですぐにonreadystatechangeを呼び出そうとしています。割り当てをonreadystatechangeopen/sendコードの前に移してください。

+0

+1:あなたのリクエストで最後に行うべきことです。 – annakata

+0

それは固定ですそれ;ありがとう。 –

0

キャッシングの問題が発生していると思います。 Internet ExplorerがFirefoxよりもajax呼び出しをキャッシュする際に、より積極的であることに気付きました。起こっていることを確実にする1つの方法は、Fiddler2を使用することです。このアプリケーションはあなたのWebトラフィックを監視し、ブラウザがリクエストを行っているかどうか、そしてあなたが得るレスポンスにどのキャッシュヘッダーが戻ってくるかを見ることができます。

あなたはあなたがリクエストを送っている後onreadystatechange機能を設定しているhttp://www.fiddlertool.com/fiddler/

1

HI、 キャッシングは、同じURLが繰り返し呼び出されていることが原因です。 UR1を動的に変更すると、この問題を解決できます。現在の時間とクエリーストリングを追加して、結果に影響を与えずにURLを変更することができます。

+0

このテクニックは私にとって何度も働いています。あなたのURLの最後に&zz = SomeRandomNumberのようなものを追加して、あなたがそれを呼び出すたびにURLが一意であるようにしてください。次に、ハンドラコード内のzz変数を無視します。 –

関連する問題