【Ajax】通信メソッドが勝手にOPTIONSになったら

以下のような条件でAjax通信を行うと、ブラウザは自動的に「プリフライト」と呼ばれる通信チェックを行います。

プリフライトは通信メソッド「OPTIONS」でサーバーに通信を行い、

をチェックします。
このチェックをパスしなかった場合はそこで処理は終了し、本来のGETやPOSTの通信が行われませんので

「あれ、POSTしたのになんでOPTIONSになってるんだ?」

と混乱してしまいますよね。

ちなみにサーバー側でクロスドメインを許可するには
レスポンスヘッダにAccess-Control-Allow-Originを設定し、許可するドメインを指定します。
PHPの場合ですべてのドメインを許可するなら

のようになります。

また、独自のリクエストヘッダを許可するには
レスポンスヘッダにAccess-Control-Allow-Headersを設定し、許可するヘッダを指定します。

こんな感じです。

【jQuery】Ajaxの非同期通信を中断する

jQueryの$.ajax関数で

にして非同期通信を行うときに、通信を中断することができます。

やりかたは、$.ajax関数の戻り値を変数に格納し、

中断したい場合はその変数のabortメソッドを呼びます。

abortメソッドを呼ぶと、上記の例のように
thrownに「abort」が返されますので
エラーなのか中断なのかの切り分けが可能です。

通信中にモーダルでローディング表示を行っている場合などに
ローディングダイアログに「中断」リンクをつけてあげると親切ですよね。

【Ajax】クロスドメインで非同期通信を行う

クロスドメインで非同期通信を行う方法の一つに、
「Access-Control-Allow-Originヘッダ」
があります。

サーバー側でこのヘッダを

のように記述すればクロスドメインでもアクセスが可能になります。

PHPでのヘッダの設定は

です。

*の部分に特定のドメインを入れれば、特定のドメインのみを許可することもできます。