• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jQuery Ajaxでクロスドメイン通信)

jQuery Ajaxでクロスドメイン通信

このQ&Aのポイント
  • Ajaxを使用して、クロスドメイン通信を行いたい場合、dataTypeオプションを指定する必要があります。
  • データをPOSTで送信する場合、dataTypeオプションは受け取るレスポンスのデータタイプを指定します。
  • クロスドメイン通信を行うには、dataTypeオプションをjsonpにする必要があります。ただし、この場合、URLにパラメータが付与されるため、POSTリクエストで大量のデータを送信することはできません。

質問者が選んだベストアンサー

  • ベストアンサー
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

(1) > AjaxのdataTypeオプションは、PHPからjQueryが受け取るレスポンスのデータタイプのことですか? はい。レスポンスのデータタイプです。 (2) > dataTypeがjsonpじゃないとクロスドメイン通信はできないのでしょうか? セキュリティ上の理由(同一生成元ポリシー)から、 クロスドメインでAjaxリクエストを出すことはブラウザによって禁止されています。 そのため、iframeやプロキシ、JSONP、Flash(サーバ側で設定が必要)を使った回避策が考えられています。 XMLHttpRequest Level2を使えばクロスドメイン通信が可能ですが、 サーバ側で設定が必要になります。 (3) > dataTypeがjsonpのとき、……typeオプションをPOSTにしているのにGETのようにパラメータが付くのはなぜでしょうか? JSONPではJavaScriptがリクエストを投げるのではなく、 HTMLの末尾に以下のようなscriptタグがこっそり追加されます。  <script type="text/javascript" src="(送信先)?data=..."></script> 外部ファイルを読み込むようになっているためGETが使用されますし、 GETにボディはありませんからURLにパラメータがつきます。

suffre
質問者

お礼

ご回答頂きましてありがとうございます。 質問2.ですが、実はdataTypeをhtmlにしてもクロスドメイン通信はできました。 ただ、通信先のPHPがBasic認証しているディレクトリ以下にあり、Basic認証をしているとクロスドメイン通信はできず、Basic認証を外すとクロスドメイン通信ができるという、不可解な状況になりました。 そのためdataTypeをjsonpにしてクロスドメイン通信をしたらBasic認証をしていても通信ができました。しかし質問内容にもありますようにGETの文字数制限で引っかかってしまいました。 やりたいことは ・Basic認証をしているディレクトリ以下のPHPファイルにデータを投げたい ・PHPはjQueryを実行するドメインとは別のドメインです ・データの文字数は数千文字あるのでPOSTで投げたい ・PHPからjQueryが受け取るのはhtmlでもtextでもjsonでも何でもいいです。要はjQueryからPHPに大きめのデータが渡せればいいです これらを実現するために何かおわかりでしたらよろしくお願い致します。

関連するQ&A