- 締切済み
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ページ画面遷移した 簡単なクライアント側アプリを作れる程度です。
- みんなの回答 (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>
お礼
ありがとうございます。 明日試してみます!