ふりにっき 2007年04月21日
ふりにっき
2007年04月
7
17
24 25
<2007/32007/5>



最近のコメント

登録リスト


カテゴリログ

月別ログ

日記ログ検索




Links
ひげ脱毛クチコミ体験ガイド
楽天比較net

2007/04/21 (土)  「日記コメント(2007/04/21)」

>ナトリウム。
>自然吸気。



ドイツビール吹いたwwww
てか最初、これなんてスパム?とか思ったら絶妙なツッコミだということに気づいたwwwぅは

じゃ、じゃあ、えーっと、思いつかない。。=■○_


2007/04/21 (土)  「xmlhttprequestでエラー(Firefox)」
たまには役に立つ情報でも(ぇ

Firefoxで、XMLHttpRequestのopenメソッドを使用してリクエストを送信しようとしたら、
エラー: [Exception... "Component returned failure code: 0x80004005
(NS_ERROR_FAILURE) [nsIXMLHttpRequest.open]" nsresult: "0x80004005
(NS_ERROR_FAILURE)" location: "JS frame ::
http://192.168.xxx.xxx/xxx/xxx.js :: sendXMLHttpRequest :: line 60"
data: no]
ソースファイル: http://192.168.xxx.xxx/xxx/xxx.js
行: 60
って言われて途方にくれてました。
iframeから親ウインドウの関数を呼び出して、XMLHttpRequestを使った通信を行うと、このエラーが出るようです。
日本語サイトでこの情報を書いてるページが見つからなかったので、メモしときます。
#たぶん探し方が悪かったんだと思うけど。


Webページでファイルアップロードするとき、FORMのtargetをiframeにすることで、見た目にはページの遷移が無くアップロードを行うことができますよね。
例:
<form action="xx.cgi" method="post" enctype="multipart/form-data" target="upload_frame">
<input type="file" name="uploadfile">
</form>
<iframe name="upload_frame"></iframe>
iframeは、display:noneのようにしておくと、iframeが見えなくなって吉。

こうした場合、CGIのレスポンスが返ってくるiframeから、親ウインドウ(つまりiframeを記述したページ)に完了通知を出したいですよね。
window.onload = function() {
window.parent.onUploadFinish();
}
onUploadFinish関数はiframeを記述したページに定義してあるものとします。
たとえばこんな感じで、終了を通知するとします。

この通知を受けて、onUploadFinishから、例えば「getDataByXHR」という関数を呼び出すとします。
getDataByXHR関数では、XMLHttpRequestを使った通信を行います。
そうすると、Firefoxさんが前述のエラーを言い渡してきます・・。

どうやら、この現象は以前から明らかになっている問題で、解決策も示されていました。
参考にしたのはこちらです。
Fleegix.org : XMLHttpRequest and 0x80004005 (NS_ERROR_FAILURE) error

結論は、直接目的の関数を呼び出さずに、setTimeoutを使って目的の関数を間接的に呼び出すことで、問題を回避することが出来ます。
XMLHttpRequest();

setTimeout(XMLHttpRequest, 0);
のようにすることで、エラーがでなくなりました。


なんか強引に回避してる感がありますね。。
なお、上記のHTMLやJavaScriptは動作確認しておりませんので、参考までにということで予めご了承ください。


追記:
2007/04/21 (土) 「xmlhttprequestでエラー(Firefox):修正」


2007/04/21 (土)  「xmlhttprequestでエラー(Firefox):修正」
最後の例が間違ってた・・・orz

getDataByXHR();

setTimeout(getDataByXHR, 0);