ajaxについて教えてください。


ドメインAのファイルに下記の様に書き
<script type="text/javascript" src="http://ドメインB/hoge.js"></script>

ドメインBにある hoge.js でajaxを使い、
ドメインB内にあるファイル foo.txt を読み込んで表示する。

と言うことを行いたいのですが、
この場合、foo.txt は
ドメインAから見ると、一度ドメインBのhoge.jsを間に入れても
ドメインAから見ると違うドメインなので無理なのでしょうか?

実際に試すと上記に書いたとおりダメなのですが、
確認も含めて質問させていただいております。

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/02/26 16:48:51
  • 終了:2010/02/26 20:58:20

回答(3件)

id:JULY No.1

JULY回答回数966ベストアンサー獲得回数2472010/02/26 18:29:00

ポイント20pt

この場合、foo.txt は

ドメインAから見ると、一度ドメインBのhoge.jsを間に入れても

ドメインAから見ると違うドメインなので無理なのでしょうか?

その通りなんですが、これぞというページは見つかりませんでした。

一応、下記のページが回避方法を含めてまとめてあるので、紹介して起きます。

XMLHttpRequest のクロスドメインの制約についてまとめたφ(..)メモメモ - 猫(=・ω・=)顔 1.0β

XMLhttpRequest クロスドメイン 辺りをキーワードに検索すると、いろいろ出来てきます。

id:worldtravel

ありがとうございました。

2010/02/26 20:56:24
id:y-kawaz No.2

y-kawaz回答回数1419ベストアンサー獲得回数2252010/02/26 19:00:37

ポイント60pt

jsファイルがどこにあるかは関係なく、jsが実行されるドメインがと取得しようとしているURLのドメインとが一致するかどうかがクロスドメイン制約になります。

質問のケースだとドメインAからドメインBのファイルを取得しようとしているのでクロスドメイン制約に引っかかってアクセスは出来ません。


Javascriptで別ドメインのデータを取得する方法は幾つかあるのであげてみます。

●jsonpを使う方法(最近の流行りはコレ)

これはドメインB上のfoo.txtをJSONP形式にしてしまい、それをドメインB上からscriptタグで読み込むことで実現します。

foo.txt の内容が元々「ほげほげ」だった場合、foo.txtの内容を「funcA("ほげほげ");」という内容になるようにしておき、

ドメインAにはデータを受け取る funcA(text){alert(text)} のような関数を作った上で、

<script src="ドメインB/foo.txt" type="text/javascript"></script> を埋めて置くことでドメインB上のデータを取得する方法です。


●document.domainを設定する方法(マイナー感のある方法)

AとBが同じサブドメインを共有している場合はdocument.domainに共通するドメイン名を設定するとクロスドメイン制約を緩和出来ます。

例えば a.example.jp と b.example.jp だとしたら document.domain='example.jp'; をドメインAで設定しておけばb.example.jpのデータ取得が出来るようになります。


●ドメインB側でAccess-Controlヘッダを出力してドメインAからのクロスドメイン通信を許可する(今後は増えるかも?)

最新のブラウザに限られてしまいますが、今時のXMLHttpRequestは相手がAccess-Controlヘッダを返してさえくれれば普通にクロスドメイン通信が可能です。

http://labs.gmo.jp/blog/ku/2008/01/firefox3xmlhttprequest.html

例えばドメインBのWEBサーバの設定などで AccessControl: allow <ドメインA> を出力出来ればOKです。


他にも色々とハック方法はありますが、上記3点が正道だと思います。

id:worldtravel

あっ そうですね。JSONP

確か以前クロスドメイン回避できたはずなんだけど...

と思っていたらJSONPを使っていました。

半年以上使わないとその言葉すら忘れてしまいます。

ありがとうございました。

2010/02/26 20:57:38
id:km1967 No.3

km1967回答回数541ベストアンサー獲得回数402010/02/26 19:03:55

できる。

ドメインAにあるかBにあるかという問題ではなく

JavaScriptが実行されているクライアント(ブラウザ)を基準にする

foo.txtにフルドメインを付けてやれば良い

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません