プロが教える店舗&オフィスのセキュリティ対策術

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ページ画面遷移した
簡単なクライアント側アプリを作れる程度です。

A 回答 (1件)

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>
    • good
    • 0
この回答へのお礼

ありがとうございます。
明日試してみます!

お礼日時:2012/02/16 22:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!