• 締切済み

onunload で XMLHttpRequest

ページを閉じたことをサーバへ伝えたいと思って、onunloadイベントで XMLHttpRequest により URLにアクセスしたいのですが、うまくいきません。 onunload の中から下記のような処理を行う関数を呼び出しています。 try{ var url = "http://xxxxxxx/unlock.php?no=99"; var xhr = XMLHttpRequestCreate(); //マルチブラウザ対応 xhr.open("GET", url); xhr.setRequestHeader("Content-Type", "text/plain"); xhr.send(null); }catch(e){ console.log(e); } xhr.status を見てみたら 0 になっていました。onunload でも、onbeforeunload でも send() を行ったあとに xhr.status が 0 になるようです。 画面上にテストボタンを置いて onclick から呼び出してみると、うまく動作します。 console.log を表示するとちゃんと表示されるので、onunload も onbeforeunload も 正しくセットされていると思います。 ブラウザは、Chrome と Firefox の2種類で試しましたが、同様でした。 やはりフォームが閉じるときは XMLHttpRequest は使えないのでしょうか? 何か回避する方法はないでしょうか?

みんなの回答

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.1

非同期だといけません 同期を試してみてください

haru44
質問者

お礼

早速の回答ありがとうございます。 open("GET", url, false); とすることで同期になるとのことで試してみたのですが、 send(null); は実行されるようになりましたが、 エラーが返されます。 NetworkError: A network error occurred. というメッセージが得られるのですが、何が悪いのか わかりません。 非同期で処理していたときは open() の直後に終わっていて send() までいきませんでしたから、同期に変更したことの 効果はあったんじゃないかと思いますが、サーバに リクエストが届かない状況は変わりませんでした。。。

関連するQ&A