Ajaxについては以前にも簡単にご紹介しました。
簡単に言うと、JavaScriptのXMLHttpRequestという組み込みクラスを利用して、すでに読み込んだページからさらにHTTPリクエストを発行することによってページ遷移なしでページの一部を動的に書き換える技術のことです。
何かと便利なAjaxですが、実はセキュリティ上の理由から、ドメインをまたぐ通信は出来ないようになっています。XMLHttpRequestクラスの「同一生成元ポリシー(Same-Origin-Policy)」によるものですが、俗にAjaxのクロスドメイン制約などと呼ばれます。
つまり、
ドメインA上のページからドメインA上のページにAjaxでアクセス → OK
ドメインA上のページからドメインB上のページにAjaxでアクセス → NG
というわけです。
JSONPという例外
ただし、例外的にクロスドメインでAjaxを利用できる方法があります。それが、JSONPを使う方法です。
JSONPとは、JSONデータを引数に取るような関数のコールバックコードをサーバから受け取り、script要素のsrc属性を使ってインポートするというものです。これは、script要素によって外部のJavaScriptファイルをインポートする場合には別ドメインのファイルが参照可能という仕様を利用してクロスドメイン制約を回避する技術です。
当然のことながら、JSONPによってクロスドメインAjaxが使用できるのは、Ajaxで通信したい相手のWebサーバがJSONP形式の文字列を返すよう実装されている場合のみです。
まとめ
クロスドメインでAjax通信したいシーンはそう珍しくないと思いますが、セキュリティ上の理由から主要なブラウザには基本的にクロスドメイン制約が掛かっています。
状況によってはJSONPを上手く使えば問題を解決できるかも知れませんので、覚えておいて損はないと思います。