人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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から見ると違うドメインなので無理なのでしょうか?

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

よろしくお願いします。

●質問者: worldtravel
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Ajax hoge js txt ダメ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● JULY
●20ポイント

この場合、foo.txt は

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

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

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

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

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

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

◎質問者からの返答

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


2 ● y-kawaz
●60ポイント

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点が正道だと思います。

◎質問者からの返答

あっ そうですね。JSONP

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

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

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

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


3 ● km1967
●0ポイント

できる。

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ