- 締切済み
XMLHTTPRequestでstatusが0に
2日程、色々と試したのですが、どうしても自分で解決できそうにないので お世話になりたいと思い質問させて頂きました。 XMLHttpRequestを使用し、サーバーと非同期通信を行っているのですが ChromeとFireFoxの場合、戻り値のstatusが0になり、サーバーからのレスポンスデータを 取得する事ができません。IEでは7 ~ 9まで正常に動作する事を確認しております。 (環境) クライアントOS:Windows7 Professinal サーバーOS:Windows7 Professinal Webサーバー:IIS7.5 ブラウザ:Google Chrome 16.0.912.77 m, FireFox 10.0.1 (クライアント側プログラム) function requestMain(param) { // サーバー名はxxxにさせて頂きました。 var url = "http://xxx.xxx.xxx.xxx/app/xhr.cgi?" + param; var obj = createHttpRequest(); obj.open("GET", url, true); obj.setRequestHeader("If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"); ojb.onreadystatechange = function() { if (obj.readyState==4) { alert(obj.status); // ← ここが0に。IEだと200が返ってきます。 alert(obj.responseText); // ← IEの場合予期したデータがきます。Chrome/FF // ともに空です。 } } httpoj.send(""); } function createHttpRequest() { if(window.ActiveXObject) { try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { return null; } } } else if(window.XMLHttpRequest) { return new XMLHttpRequest(); } } (サーバー側) static void main(string[] args) { string rtnStr = "HTTP/1.0 200 OK\n"; rtnStr += "<head>\n"; rtnStr += "Access-Control-Allow-Origin:*\n" // ← クロスドメイン対策??? rtnStr += "Content-Type: text/html; charset=UTF-8;\n; rtnStr += "</head>\n\n"; rtnStr += "<body>test is</body>"; Console.WriteLine(rtnStr); } 試しに、prototype.jsのAjax.Requestを使用しても結果は同じでした。 後、プログラムでなく、ブラウザーのURL覧からCGIをコールするとtest isが表示されます。 ※ CGIはC#で書いています。ASP.NETがあるので意味がないのですが すみません。^^; 過去にも似たような質問をされた方がいらっしゃったのですが 結局クロスドメインの問題じゃない?とか回答がついてないとかで 答えがわかりませんでした。英語サイトにはそれなりに情報があるみたいですが 読めないのでよくわかりません ;_; (調べろと言われればそれまでなのですが。。。) 組み込み系や、C/S・スタンドアロンでのWindowsアプリはそれなりの経験を 持っているのですが、Web系は今回初めてで、やり始めて丁度10日になります。 ですので、トンチンカンなご質問をしているかもわかりませんが、 どうぞよろしくお願いいたします。 P.S 最近html, css, javascriptがお試し程度にわかり4、5ページ画面遷移した 簡単なクライアント側アプリを作れる程度です。
- OSHIOSHI77
- お礼率100% (3/3)
- AJAX
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- dscripty
- ベストアンサー率51% (166/325)
HTTP ヘッダと HTML の HEAD 要素が頭の中で混ざってぐちゃぐちゃになっちゃってる感じ。 | HTTP/1.0 200 OK | <head> | Access-Control-Allow-Origin:* | Content-Type: text/html; charset=UTF-8 | </head> | | <body>test is</body> ↑ではなくて↓を返すと大丈夫かも。 | HTTP/1.0 200 OK | Access-Control-Allow-Origin:* | Content-Type: text/html; charset=UTF-8 | | <html> | <head><title>test is</title></head> | <body><p>test is</p></body> | </html>
関連するQ&A
- XMLHttpRequestでキャッシュを使用させないようにしたい
ある場所にonMouseoverで ツールチップのようにデータを XMLHttpRequestを使用して読み込み、表示しています。 読み込みは getPage('xxx.php?id=$id') というようにPHPを使用してDBを読み取り、 該当のIDの情報を読み出しているのですが、 この情報が編集されることがあります。 しかし、一回開いてしまうと、キャッシュが効いているのか、内容を編集しても編集後の内容を取ってくれません。 テストをした結果ブラウザを閉じるか、キャッシュを削除すれば又最新の情報を表示してくれるのですが、 読み込むごとに最新の情報にアクセスする(キャッシュを使用しない)方法はないでしょうか。 ブラウザはIEを使用しています。 よろしくお願いします。 以下ソース function getPage(pageURL) { document.charset='EUC-JP'; if(document.all){ rx = event.clientX + document.body.scrollLeft; ry = event.clientY + document.body.scrollTop; }else{ rx = NNX; ry = NNY; } xmlhttp = createXMLHttp(); if (xmlhttp) { xmlhttp.onreadystatechange = setPageData; xmlhttp.open('GET', pageURL,true); xmlhttp.send(null); }else{ alert("XMLHttpRequest失敗"); } } function setPageData() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { opentext( [xmlhttp.responseText] ,rx,ry); //↑表示用ルーチンに受け渡しているだけなので割愛 } } // XMLHttpsオブジェクト作成 function createXMLHttp() { try{ return new ActiveXObject ("Msxml2.XMLHTTP"); }catch(e){ try { return new ActiveXObject ("Microsoft.XMLHTTP"); }catch(e){ try { return new XMLHttpRequest(); }catch(e) { return null; } } } return null; }
- 締切済み
- JavaScript
- XMLHttpRequestのブラウザ対応
JavaScriptで、あるURLの結果を取得しようと以下のようなスクリプトを組みました。 var xmlHttp = false; function loadText(){ xmlHttp = new XMLHttpRequest(); xmlHttp.open("GET", "http://hogehoge, true); xmlHttp.onreadystatechange = checkStatus; xmlHttp.send(null); } function checkStatus(){ if (xmlHttp.readyState == 4 && xmlHttp.status == 200){ res = xmlHttp.responseText; alert(res); } } IE8では、結果が取得できたのですが、firefox4.0.1,Chromeでは取得できませんでした。 xmlHttp.status が0となってしまいました。 ただし、GET対象のURLをローカルサーバにすると、取得することができました。 firefox4.0.1,Chromeのブラウザの設定なのでしょうか?それともスクリプトの書き方に問題があるのでしょうか? すみませんが、教えてください。
- 締切済み
- JavaScript
- AJAXでサイト存在チェック時、スクリプトエラー
AJAXを使用し、遷移したいサイトが存在する場合、その際サイトに遷移し、存在しない場合は、ほかのサイトに遷移するという処理を行いたいのですが、スクリプトエラーが発生しまい困っています。 遷移先をローカルサーバのリンクを指定するとうまくいくのですが、外部サーバのアドレスを指定するとエラーになってしまいます・・。何か制約があるのでしょうか? また、ほかの方法で実現できるのであれば、教えてください。 現在記述しているソースの一部を下記に添付します。 <script language="JavaScript" type="text/JavaScript"> <!-- function fucXMLHttpRequest(){ /* XMLHttpRequestオブジェクト作成 */ var xmlhttp = createXmlHttp(); xmlhttp.onreadystatechange = handleHttpEvent; function handleHttpEvent(){ if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { window.open("http://www.inte.co.jp/xxxx/xxxx"); } else { window.open("http://www.inte.co.jp/"); } } } xmlhttp.open("GET", "http://www.inte.co.jp/xxxx/xxxx" , true); xmlhttp.send(null); return false; } function createXmlHttp(){ if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else if (window.ActiveXObject) { try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { return new ActiveXObject("Microsoft.XMLHTTP"); } } else { return null; } } //--> </script> </head> <a href="#" onClick="fucXMLHttpRequest()">詳しくはこちら</a>
- ベストアンサー
- JavaScript
- Ajaxでデータベース(PostgreSQL)
を非同期で読み込むことができるでしょうか? ファイルならば下記のようにすれば良いみたいですが データベースの場合のやり方がわかりません。 PostgreSQLのデータを読み込むにはどうしたら良いのでしょうか? <script> var xmlHttp; function loadText() { if (window.XMLHttpRequest) { xmlHttp=new XMLHttpRequest(); } else { if(window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else { xmlHttp = null; } } xmlHttp.onreadystatechange=checkStatus; xmlHttp.open("GET","plan.txt",true); xmlHttp.send(null); } function checkStatus() { if(xmlHttp.readyState==4 && xmlHttp.status==200) { alert(xmlHttp.responseText); } } </script> <form> <input type="button" value="read file" onClick="loadText()"> </form>
- ベストアンサー
- JavaScript
- リンククリックのアクセスカウンターがうまくいかない
JavaScriptと非同期通信を使って、 リンククリックのアクセスカウンターを作ろうとしていますが、うまくいきません。 JavaScriptは、 function createHttpRequest(){ //Win ie用 if(window.ActiveXObject){ try { //MSXML2以降用 return new ActiveXObject("Msxml2.XMLHTTP") } catch (e) { try { //旧MSXML用 return new ActiveXObject("Microsoft.XMLHTTP") } catch (e2) { return null } } } else if(window.XMLHttpRequest){ //Win ie以外のXMLHttpRequestオブジェクト実装ブラウザ用 return new XMLHttpRequest() } else { return null } } function upcount(pr) { //XMLHttpRequestオブジェクト生成 var httpoj = createHttpRequest() //[1] var url = './count.php?prid='+pr; // alert(url); //open メソッド httpoj.open( 'GET' , url , true) //[2] //受信時に起動するイベント httpoj.onreadystatechange = function() //[4] { } //send メソッド httpoj.send('') //[3] } です。 HTMLは、PHPの一部なのですが、 $prdata[$prcount]= "<li><a href=\"$link\" onClick=\"upcount('$prid');\">$title</a></li>\n"; な風になっています。 ブラウザは今のところFirefoxを使っています。 ここで奇妙なことが起こっています。 upcountファンクションのalertのところを一回でもコメントアウトでなくして、 リンクをクリックすると、うまくカウントされるのです。 コメントアウトにしても、うまくカウントされ続けます。 しかしコメントアウトのままですと、別のPCのFirefoxでリンクをクリックしても、 カウントされませんでした。 奇妙な現象も解明したい気もしますが、まずはソースにミスがあると 思っていますので、どうかデバッグにご協力ください。 よろしくお願いいたします。
- 締切済み
- JavaScript
- XMLHttpRequest() Ajaxについて
こんにちは。Ajaxに挑戦しているのですが、テキストフィールドに入力して送信ボタンを押したら、自作関数の XmlHttpRequest()を呼び出して、kakunin.jspに飛ばして、kakunin.jspで作ったコードを<result>タグ内に表示し、その際現れる「削除」ボタンをクリックしたら、今度は自作関数 deleteRequest()を呼び出し、sakujyo.jspに飛ばしてデータベースのレコードの削除を行い、<result>タグ内の表示をかえたいのですが、削除の方がうまくいっておりません(削除するボタンを押して、deleteRequest()は呼び出しているのですが、そのあと、delete.jspに飛ばず、kakunin.jspに飛びます)。以下が大まかなコードです。 function XmlHttpRequest(){ if(window.XMLHttpRequest){ httpObject=new XMLHttpRequest(); } else if(window.ActiveXObject){ httpObject=new ActiveXObjec("Msxml2.XMLHTTP"); } httpObject.onreadystatechange=display; 途中省略します。 httpObject.open("GET","kakunin.jsp?nen="+encnen+"&tsuki="+enctsuki+"&syaincode="+encsyaincode,true); httpObject.send(null); } function display(){ if(httpObject.readyState==4 && httpObject.status==200){ document.getElementById("result").innerHTML=httpObject.responseText; 省略します。 } } function deleteRequest(){ if(window.XMLHttpRequest){ delhttpObject=new XMLHttpRequest(); } else if(window.ActiveXObject){ delhttpObject=new ActiveXObject("Msxml2.XMLHTTP"); } delhttpObject.onreadystatechange=displaysql("削除しました"); 省略します delhttpObject.open("GET","delete.jsp?nen="+encnen+"&tsuki="+enctsuki+"&syaincode="+encsyaincode,true); delhttpObject.send(null); } function displaysql(msg){ if(delhttpObject.readyState==4 && delhttpObject.status==200){ document.getElementById("result").innerHTML=delhttpObject.responseText; alert(msg); kidou(); } } こういったやり方がわからなく、自己流でやってみましたので、おかしな部分もあるかもしれませんが、やりたい事は押すボタンによって、飛ばすjspファイルを変え、<result>タグ内の表示も、各jspファイルで、 出力されたものを表示させたいのですが、自分で考えたやり方ではどこか間違っているようですので、どなたかアドバイスの方、よろしくお願いいたします。 環境は、IE7です。よろしくお願いいたします。
- 締切済み
- JavaScript
- Ajax は NN でも使えますか?
初歩的な質問ですみません。 Ajax の非同期通信で、XMLHTTP オブジェクトを作成するスクリプトを見ると、 function createXMLHttpRequest() { var XMLhttpObject = null; try{ XMLhttpObject = new XMLHttpRequest(); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ return null; } } } return XMLhttpObject; } のように Microsoft のオブジェクトを読み込んでいるように見えるのですが、NN でもつかえるのでしょうか。 また、Macintosh との互換性はどうなのでしょうか。 ご存知の方はお教えください。
- ベストアンサー
- JavaScript
- Ajaxで表示させると内容が不変
下記Ajaxでtest.txtを表示できたのですが test.txtの内容を Hello Japan. 変えてもブラウザのキャッシュをクリアしない限り Hello World! が出つづけます。 下記ページにキャッシュ無効のヘッダをつけても同じです。 子の問題を解決する手段を教えてください。 test.txt: Hello World! x.html: <script> var xmlHttp; function loadText() { if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } else { if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else { xmlHttp = null; } } xmlHttp.onreadystatechange = checkStatus; xmlHttp.open("GET","test.txt",true); xmlHttp.send(null); } function checkStatus() { if (xmlHttp.readyState==4&&xmlHttp.status==200) { var node = document.getElementById("disp"); node.innerHTML = xmlHttp.responseText; } } </script> <form> <input type="button" value="push" onClick="loadText()"> </form> <div id="disp"></div>
- ベストアンサー
- JavaScript
- ActiveXObject("Msxml2.XMLHTTP")がFirefoxでうまく作動していないようです。
ブラウザでweb上のxmlを取得して内容を表示しようとしています。 windowsXPprosp2.0でIE6.0では動作を確認しています。 スクリプトの詳しいところは実際はよく分かっていませんがコピペに手を加えて現在の形になっています。 <title>テストページ</title> function myCheck() { var r = null; if (typeof window.XMLHttpRequest == "undefined") { if (typeof window.ActiveXObject == "function") { try { r = new ActiveXObject("Msxml2.XMLHTTP"); r = window.XMLHttpRequest = myXMLrequest() { r = new ActiveXObject("Msxml2.XMLHTTP"); } } catch (e) { try { r = new ActiveXObject("Microsoft.XMLHTTP"); r = window.XMLHttpRequest = myXMLrequest() { r = new ActiveXObject("Microsoft.XMLHTTP"); } } catch (e) { } } } // else if () { } } // else { } r.onreadystatechange = function() { if ( ( r.readyState == 4 ) && ( r.status == 200 ) ) { 以下続く try catchの処理でIEとFierfoxなどのブラウザ分けをしていると思っているのですが教えてください。 Firefox2.0 Opera9ともに画面が真っ白で何も表示されません。 よろしくご教授ください。
- ベストアンサー
- JavaScript
- サーバの、クライアント間でデータ共有
JavaScript, HTML5 で作成しています。 現在、サーバ側の hoge.txt を読込んで、読んだ内容をクライアント側へ 渡す事を行おうとしています。 ActiveXObject を使用してファイルを読み、取得した responseText を <INPUT type="hidden">へ書き込んでサーバからクライアントへサーバの hoge.txt の内容をクライアントへ渡す事を実現をさせています。 上記では、改行なしの数十文字程度さであれば問題ないjのですが、hoge.txt は改行ありの文字数制限なし との仕様との事なので、上記では仕様の要件を満たせていません。 サーバからクライアントへ hoge.txt をダウンロードして読み込ませた方が 要求を満たす事ができるのでしょうか? 何か良い方法があったらお教えください。 ● 現在のソース 【HTML】 <body onload="initialize()"> <input type="hidden" id="hogetext" value="" /> 【JavaScript】 function initialize() { if (navigator.appName.indexOf("Microsoft") > -1) { xmlhttp = new ActiveXObject("MSXML2.XMLHTTP"); } else { xmlhttp = new XMLHttpRequest(); } xmlhttp.open("GET", 'hoge.txt', true); if (navigator.appName.indexOf("Microsoft") > -1) { xmlhttp.onreadystatechange = SetText; } else { xmlhttp.onload = SetText; } xmlhttp.send(""); } function SetText() { if (xmlhttp.readyState == 4) { document.getElementById('hogetext').value = xmlhttp.responseText; } }
- ベストアンサー
- HTML
お礼
ありがとうございます。 明日試してみます!