javascriptとXMLHttpRequestを使用して、ローカルで非同期通信を行いたい(file://c:/...)のですが、うまく動作させることができません。
OSはWindowsXp Pro SP3で、今日時点までのWindowsUpdate適用済みです。
ブラウザとその動作結果は以下の通りです。
-----------------------------------
Chrome 16.0.912.77, Opera11.61
・1回目のalert結果
「エラー0」
・2回目のalert結果
alert表示されず
firefox9.0.1, IE8.0.6001.18702
・1回目のalert結果
「エラー0」
・2回目のalert結果
「エラー0」
-----------------------------------
また、ソースの抜粋は、コメントにつけます。
よろしくお願いします。
過去質問でjQuery使っているので、
今回もjQuery使えば楽だと思いますが・・・
http://hisasann.com/housetect/2008/06/javascript_4.html
jQueryは使わないということなら、
こちらの記事を参照して書き直してみると良いでしょう
http://hisasann.com/housetect/2008/08/jqueryieajax.html
別の話題ですが、こんなのもあります
http://ascii.jp/elem/000/000/559/559105/
過去質問でjQuery使っているので、
今回もjQuery使えば楽だと思いますが・・・
http://hisasann.com/housetect/2008/06/javascript_4.html
jQueryは使わないということなら、
こちらの記事を参照して書き直してみると良いでしょう
http://hisasann.com/housetect/2008/08/jqueryieajax.html
別の話題ですが、こんなのもあります
http://ascii.jp/elem/000/000/559/559105/
回答ありがとうございました。
示して下さったページを読んで、jQueryのgetメソッドで成功しました。
ローカルに関してはIE,FireFoxのみ成功で、サーバにupload後は、OperaもChromeも成功しました。
有り難うございました。
ローカルでhttpサーバは動作しているでしょうか?
ご確認ください。
IISでしょうか、それともApacheでしょうか?
種類とバージョンをお知らせください。
すみません。No.1の方の回答で、事足りましたので・・。
ちなみに、WindowsXp付属のIIS5では、XMLHttpRequest自体エラーでした。
WindowsVista付属のIIS7,及びIIS6互換モードではWeb.configが必要でした。(当然と言えば当然なのですが)
OperaではXMLHttpRequestでローカルファイルにアクセスする方法はなさそうです。
Chromeでは、起動オプションに「--allow-file-access-from-files」を付ければ可能です。
ローカルファイスにアクセスした場合のステータスコードは200ではなく0になります。
ご提示のコードでは、XMLHttpRequestによるアクセスが完了しないままにそのXMLHttpRequestを次のアクセスのために使いまわしてしまっています。非同期通信なので、1度目のアクセスが完了しないうちに2度目のリクエスト送信に入ってしまう可能性があります。
1つのXMLHttpRequestオブジェクトを使いまわす方法もありますが、複数のXMLHttpRequestオブジェクトを使う方が簡単です。
簡単な例を用意しました。
function GetXMLHttpRequest() { try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch (err) {} try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch (err) {} if (typeof XMLHttpRequest !== 'undefined') { return new XMLHttpRequest; } return null; } function AsyncGetRequest(url, onload) { var xhr = GetXMLHttpRequest(); if (!xhr) { alert('XMLHttpRequest is not supported'); return; } xhr.open('GET', url, true); xhr.onreadystatechange = function () { if (xhr.readyState !== 4) return; if ({0: true, 200: true, 201: true}[xhr.status]) { onload(xhr.responseText); } else { alert('XMLHttpRequest error status: ' + xhr.status); } xhr = onload = null; }; xhr.send(null); } function OnReady(text) { alert(text); } function NonSyncReadData() { AsyncGetRequest('a.html', OnReady); AsyncGetRequest('b.html', OnReady); }
可能ならローカルにサーバ環境を用意することをおすすめします
ソースまで書いて頂き有り難うございました。
今回は、jQueryにひかれてしまいました。
ローカルサーバを立てずにローカルファイルを読み込むには制限があります。
chromeで「Origin null is not allowed by Access-Control-Allow-Origin.」がでる場合は、起動オプションの「--allow-file-access-from-files」。
firefoxはアドレスバーに
about:config と打ち込んでEnter。
security.fileuri.strict_origin_policy
の値をfalseにすればローカルでもajaxのファイル読み込みができるようになると思います。
jquery + colorboxに関する質問です。 colorboxというモジュール.. - 人力検索はてな
これは、WEBからローカルファイルにアクセスできると言うことでしょうか?
完全に裏技ですね。ありがとうございました。
webじゃなくてローカル環境だけだと思いますよ
お話は、ほぼ収束した感じですかね。
XMLHttpRequest っちゅうくらいなので、
http: じゃない file: なんかで、同じ動作を期待すんなよ、ってことでしょうか。
Firefox だと、ドキュメントに file プロトコルもサポートするぜ、とは書いてあるんですけれど。
https://developer.mozilla.org/ja/XMLHttpRequest
はてなグループの方で、こんな書き込みを見つけたので、参考まで。
http://subtech.g.hatena.ne.jp/mala/20110425/1303730089
file プロトコルをサポートしてる(Firefox)とは言っても、自由に好きなところを読みに行っちゃいけないよね、というのは、当たり前と言えば、当たり前の話。
実現したかったのは、WEB上でのやりとりです。それをローカルでテストしているときにどうにかできないのかなと思い、質問しました。
文字でのコミュニケーションは難しいのは承知ですが、書き方をもう少し柔らかにして頂けませんか? 文面そのものを読んだとき、かなり不快感でしたから。
回答ありがとうございました。
2012/02/02 10:25:08示して下さったページを読んで、jQueryのgetメソッドで成功しました。
ローカルに関してはIE,FireFoxのみ成功で、サーバにupload後は、OperaもChromeも成功しました。
有り難うございました。