QA@IT
«回答へ戻る

コピーミス訂正

1183
             xhr.responseType = "document";
             xhr.send();
         }
+    //]]>
     </script>
 </head>
 <body>

ブックマークレットという形ではなく普通のページ上の JavaScript として試してみましたが、質問者さんが紹介されている MDN の記事の通り response プロパティで dom を取得できることを確認しました。

質問者さんのコードで取得できなかったのは、単純にメソッドが何も返していなかったためではないでしょうか?

確認に使ったのは以下のコードです。ただし、当然ですが、response プロパティをサポートしているブラウザでないとダメです。(自分が試した限り Firefox 32.0.3, Chrome 37.0.2062.124 m は OK、IE9 はダメでした)

クロスドメインは試していませんが XMLHttpRequest の仕様から考えてダメだと思います。取得できる方法があったら教えていただけると幸いです。

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
    //<![CDATA[
        function xhrStart() {
            var xhr = new XMLHttpRequest();
            xhr.open("GET", "0067-HTMLPage.htm");

            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4) {
                    var label = document.getElementById("msg");
                    var dom = xhr.response;
                    var element = dom.getElementById("para1");
                    var innerHtml = element.innerHTML;
                    label.textContent = innerHtml;
                }
            }

            xhr.responseType = "document";
            xhr.send();
        }
    //]]>
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <input type="button" value="Request" onclick="xhrStart();" />
        <hr />
        <span id="msg" />
    </form>
</body>
</html>

上のページから非同期要求する 0067-HTMLPage.htm は以下の通りです。応答は以下のテキストそのままの形で返ってきます(Fiddler2 で確認)。そのテキストから上のコードの xhr.response で dom が取得できるようです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>XMLHttpRequest Test</title>
</head>
<body>
    <h1>XMLHttpRequest Test</h1>
    <p id="para1">
        para1 の InnerText
    </p>
</body>
</html>
ブックマークレットという形ではなく普通のページ上の JavaScript として試してみましたが、質問者さんが紹介されている MDN の記事の通り response プロパティで dom を取得できることを確認しました。

質問者さんのコードで取得できなかったのは、単純にメソッドが何も返していなかったためではないでしょうか?

確認に使ったのは以下のコードです。ただし、当然ですが、response プロパティをサポートしているブラウザでないとダメです。(自分が試した限り Firefox 32.0.3, Chrome 37.0.2062.124 m は OK、IE9 はダメでした)

クロスドメインは試していませんが XMLHttpRequest の仕様から考えてダメだと思います。取得できる方法があったら教えていただけると幸いです。


```
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
    //<![CDATA[
        function xhrStart() {
            var xhr = new XMLHttpRequest();
            xhr.open("GET", "0067-HTMLPage.htm");

            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4) {
                    var label = document.getElementById("msg");
                    var dom = xhr.response;
                    var element = dom.getElementById("para1");
                    var innerHtml = element.innerHTML;
                    label.textContent = innerHtml;
                }
            }

            xhr.responseType = "document";
            xhr.send();
        }
    //]]>
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <input type="button" value="Request" onclick="xhrStart();" />
        <hr />
        <span id="msg" />
    </form>
</body>
</html>
```


上のページから非同期要求する 0067-HTMLPage.htm は以下の通りです。応答は以下のテキストそのままの形で返ってきます(Fiddler2 で確認)。そのテキストから上のコードの xhr.response で dom が取得できるようです。


```
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>XMLHttpRequest Test</title>
</head>
<body>
    <h1>XMLHttpRequest Test</h1>
    <p id="para1">
        para1 の InnerText
    </p>
</body>
</html>
```

回答を投稿

ブックマークレットという形ではなく普通のページ上の JavaScript として試してみましたが、質問者さんが紹介されている MDN の記事の通り response プロパティで dom を取得できることを確認しました。

質問者さんのコードで取得できなかったのは、単純にメソッドが何も返していなかったためではないでしょうか?

確認に使ったのは以下のコードです。ただし、当然ですが、response プロパティをサポートしているブラウザでないとダメです。(自分が試した限り Firefox 32.0.3, Chrome 37.0.2062.124 m は OK、IE9 はダメでした)

クロスドメインは試していませんが XMLHttpRequest の仕様から考えてダメだと思います。取得できる方法があったら教えていただけると幸いです。

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
    //<![CDATA[
        function xhrStart() {
            var xhr = new XMLHttpRequest();
            xhr.open("GET", "0067-HTMLPage.htm");

            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4) {
                    var label = document.getElementById("msg");
                    var dom = xhr.response;
                    var element = dom.getElementById("para1");
                    var innerHtml = element.innerHTML;
                    label.textContent = innerHtml;
                }
            }

            xhr.responseType = "document";
            xhr.send();
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <input type="button" value="Request" onclick="xhrStart();" />
        <hr />
        <span id="msg" />
    </form>
</body>
</html>

上のページから非同期要求する 0067-HTMLPage.htm は以下の通りです。応答は以下のテキストそのままの形で返ってきます(Fiddler2 で確認)。そのテキストから上のコードの xhr.response で dom が取得できるようです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>XMLHttpRequest Test</title>
</head>
<body>
    <h1>XMLHttpRequest Test</h1>
    <p id="para1">
        para1 の InnerText
    </p>
</body>
</html>
ブックマークレットという形ではなく普通のページ上の JavaScript として試してみましたが、質問者さんが紹介されている MDN の記事の通り response プロパティで dom を取得できることを確認しました。

質問者さんのコードで取得できなかったのは、単純にメソッドが何も返していなかったためではないでしょうか?

確認に使ったのは以下のコードです。ただし、当然ですが、response プロパティをサポートしているブラウザでないとダメです。(自分が試した限り Firefox 32.0.3, Chrome 37.0.2062.124 m は OK、IE9 はダメでした)

クロスドメインは試していませんが XMLHttpRequest の仕様から考えてダメだと思います。取得できる方法があったら教えていただけると幸いです。


```
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
    //<![CDATA[
        function xhrStart() {
            var xhr = new XMLHttpRequest();
            xhr.open("GET", "0067-HTMLPage.htm");

            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4) {
                    var label = document.getElementById("msg");
                    var dom = xhr.response;
                    var element = dom.getElementById("para1");
                    var innerHtml = element.innerHTML;
                    label.textContent = innerHtml;
                }
            }

            xhr.responseType = "document";
            xhr.send();
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <input type="button" value="Request" onclick="xhrStart();" />
        <hr />
        <span id="msg" />
    </form>
</body>
</html>
```


上のページから非同期要求する 0067-HTMLPage.htm は以下の通りです。応答は以下のテキストそのままの形で返ってきます(Fiddler2 で確認)。そのテキストから上のコードの xhr.response で dom が取得できるようです。


```
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>XMLHttpRequest Test</title>
</head>
<body>
    <h1>XMLHttpRequest Test</h1>
    <p id="para1">
        para1 の InnerText
    </p>
</body>
</html>
```