
連続して非同期の通信を行う方法が分からず困っています。
下のようなコードを書きました。
クライアントからサーバにある「hoge1.txt」をGETするというものです。
その処理を行う関数(httpXMLRequest)を一つだけ呼び出すとうまくいきます。しかし二つ目に読み込んだ処理が実行されません。
同時に、というのは無理なのでしょうか。。
--------
・
・
・
httpXmlRequest('hoge1.txt','GET','',dspXMLElement,httpError)
//httpXmlRequest('hoge2.txt','GET','',dspXMLElement,httpError)
}
function httpXmlRequest \ (target_url,method,data,success_func,error_func){
httpObj=new XMLHttpRequest()
timerId=setInterval('timeoutCheck()',1000)
httpObj.open(method,target_url,true)
httpObj.onreadystatechange=function(){
if(httpObj.readyState==4){
clearInterval(timerId)
if(httpObj.status==200){
success_func(httpObj.responseXML)
httpObj.abort()
}
else{
erro_func(httpObj.status+':'+httpObj.statusText)
return false
}
}
}
httpObj.send(data)
}
以上、よろしくおねがいします。
No.1ベストアンサー
- 回答日時:
同時に、の意味がよくわかりませんが、
open、sendした後、サーバーからの応答を受信、接続を終了する前に、別のデータを送受信したいのであれば、
XMLHttpRequestオブジェクトを2つ以上作成し、それぞれ個別にopenしなければなりませんが、
接続を終了したあとでもう一度openするのであれば、1つのオブジェクトを使い回し出来ます。
受信するファイル名が.txtで、statusのチェックが200またはelseしかありませんが、
304(更新されていない)が返っているのではないでしょうか。
var d=new Date();
uri+='?'+d.getTime();
httpObj.open('GET', uri);
URIの後ろに日付などを入れて、常に最新のデータを受信するようにしたり、
Last-Modified-Ifヘッダを追加したり、
if(httpObj.status==200 || httpObj.status==304){
として、更新されていない場合でも受信完了として処理するか、
どちらかしておかないと行けないと思います。
頻繁に更新されるファイルでないのなら、304の処理を追加する方がいいと思います。
やりたかったことは、お察ししてくださいましたように
>open、sendした後、サーバーからの応答を受信、接続を終了する前に、別のデータを送受信
になります。
XMLHttpRequestオブジェクトを2つ以上作成すればよいですね。。気がつきませんでした。。。
その他にも304の処理の説明など参考になりました。
ご丁寧な対応感謝しております。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- オープンソース Coinmarketcap api 1 2022/05/30 15:47
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ソケットのクローズについて
-
ソケットを用いた1対多通信につ...
-
エクセル VBA でのCOMポート...
-
UDP通信する時に、相手にどうや...
-
Winsockを利用したファイルの送...
-
TCPによるファイル転送
-
Winsockで接続待ちタイムアウト...
-
ファイル転送が正常に動作しない
-
Socket通信を待ち受け状態にす...
-
closeされたsocketへの動作につ...
-
Macターミナルで実行中のプログ...
-
ウインドウにデータを入力する...
-
VBSでのSendKeysでの画面の最小化
-
C言語で、メモリを解放しないで...
-
逆コンパイルと逆アセンブルの...
-
PIC初心者です。 PIC16F88の...
-
C言語で途中までしか、プログラ...
-
イベントの発生から対応する処...
-
VC++スレッドの正しい終了のさ...
-
VB.NETでMessageBoxを表示した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信する時に、相手にどうや...
-
エクセル VBA でのCOMポート...
-
UDP通信におけるbind関数について
-
Winsockで接続待ちタイムアウト...
-
VB6のwinsockでconnectできない
-
ソケットのクローズについて
-
Connectエラーが出てしまう・・...
-
ソケットのrecvの戻り値が0
-
recv関数でフリーズしてしまう
-
CreateFile関数でCOMポートが開...
-
WinSockでの通信プログラムがう...
-
Socket通信の0バイト受信について
-
ソケット通信 同じポート番号...
-
空きポートの取得方法
-
MFCソケットについて
-
送信したデータの一部が文字化...
-
closeされたsocketへの動作につ...
-
ネットワークプログラミングに...
-
非ブロッキングソケットのrecv...
おすすめ情報