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

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

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

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

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

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

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

のようになります。

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

こんな感じです。

【jQuery】イベントが重複登録されるのを防ぐ簡単な方法

まずイベントハンドラの登録は

という感じですが、
JavaScriptによってコンテンツを動的に増やせるようなページを作成しているときに
イベントハンドラの登録がどんどん重複されていくという問題がありました。

解決方法はいくつかありますが、そのとき一番簡単だった解決方法は

onの前にoffを呼ぶ

でした。

これだけですが、期限に追われ余裕がないときは
なかなか気が付かないものですね。

【PHP】年間会員システムの開始日と終了日を求める

年間会員の仕組みを作っていて
会員の有効期間をデータベースに登録するとします。

データベース登録後に送信するメールにも有効期間を記載するため、
SQLではなくPHPで開始日と終了日を求めることになりました。

PHPの日付関数で年間会員の開始日と終了日を計算します。

開始日は当日ではなく、当月の1日とします。これは簡単ですね。

終了日は1年後の前月の最終日、たとえば2017年4月15日に入会した場合の終了日は
2018年3月31日
になります。
このとき、単純に今日の日付をもとに計算してしまうと、
月末の31日などに入会した際に前後の月が30日までしかないことにより、結果がおかしくなってしまいます。
ですので、必ず「1日」を基準に計算するようにします。

長いですね。無駄がありそうな気がしないでもないですが。

【CSS】カーソル形状の一覧

CSSで指定できるカーソル形状で、よく使われるものをリストアップしました。
文字にカーソルを合わせるとカーソル形状が変化します。

  • auto
  • default
  • pointer
  • move
  • wait
  • help
  • not-allowed
  • progress
  • n-resize
  • w-resize
  • nw-resize
  • ne-resize
  • all-scroll
  • col-resize
  • row-resize

【jQuery】入力フォームでエンターキーを押したら処理を実行

よくあるsubmitフォームの場合、
エンターキーを押すと自動的にsubmitされるようになっています。

これをformタグがないただの入力フォーム上で、
エンターキーが押されたら処理を行うようにします。