2011-08-11 15 views
4

私はウェブサイトで作業しています。 1分ごとに新しいアラームを要求しています。私たちはその操作にJavascriptとC#ハンドラを使用しています。 javascriptの一部です:XMLHttpRequestでフリーズしているページ

var url = "/myurl"; 
var xmlhttp = new XMLHttpRequest(); 
xmlhttp.open("GET", url , false); 
xmlhttp.send(); 
var xmlDoc = null; 
xmlDoc = xmlhttp.responseXML; 

私の問題の理由で何ができますか?

もう1つ。これは正しい方法ですか?

答えて

4

非同期コードを使用してください。この時点でコードが同期しているため、xmlhttp.send()の後にページが実行されなくなります。 (ノン・ブロッキングトランザクションを意味する)のXMLHttpRequestで三番目のパラメータは、非同期要求のために真でなければなりません

var url = "/handlers/doS.ashx?id=s101"; 
var xmlhttp = new XMLHttpRequest(); 
xmlhttp.open("GET", url , true); 
xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     var xmlDoc = xmlhttp.responseXML; 
     // Do something here 
    } 
} 
xmlhttp.send(); 
2
xmlhttp.open("GET", url , false); 

あなたはXMLHttpObjectを非同期ではなく、つまり同期として開きます。リクエストURLが完全に読み込まれるまで、ページはフリーズします。あなたは非同期を作る場合、あなたはyourXmlHttpObj.onreadystatechangeとコールバックハンドラを定義する必要があります、

xmlhttp.open("GET", url , true); 

しかし:

はこれを試してみてください。完全なユースケースについては、Jorrit Schippersの答えをご覧ください。

Ajaxコールはインターネット上でよく文書化されており、そこにいくつかのドキュメント/チュートリアルを探すことをお勧めします。


編集:あなたの最後の質問については、これは正確に正しい方法ではありません、あなたのコードは、クロスブラウザではなく、いくつかのIEのバージョンでクラッシュします。あなたは、単にdothisので、より良い、jQueryのようなフレームワークを使用します。

$.ajax({ 
url: 'http://Whaterver.com/doc.xml', 
success: function(data) { 
    myDoc = data; 
} 
}); 
2

サーバーへの同期呼び出しを送信しているし、それが応答を待っているので、これは可能性があります。代わりに非同期呼び出しを使用して応答を取得します。

xmlhttp.open("GET", url , true); 
3

のようなものを試してみてください。 MDN Documentation

から

引用オプションのブールパラメータ、真をデフォルト非同期操作を実行するか否かを示します。この値がfalseの場合、send()メソッドは応答が受信されるまで戻りません。

非同期リクエストの管理方法の例は、thereのようになります。

アントワーヌ

関連する問題