読者です 読者をやめる 読者になる 読者になる

AjaxのPOSTでsessionが取得できない

RailsjQueryなどの今時なライブラリを使わずにAjaxに挑んだメモ

RailsでフツーのGETではsessionが取得出来てるのに、AjaxでPOSTしたときはなぜかsessionが取得できない。POSTだから? Ajaxはセッション使えない? まさかjQueryがその辺上手く処理してた? そんな阿呆な。

jquery - Rails not reloading session on ajax post - Stack Overflow

上記ページによれば、リクエストのヘッダにCSRF tokenを入れましょうとのこと。CSRF tokenは、HTMLのヘッダに入っている下のヤツ。

<head>
<meta name="csrf-token" content="16nHoplPHvBSpKzha3p6FRfaldfkjadkdammydammydammy=">
</head>

getElementsByTagName()で取得するのだろうか。jQueryセレクターに慣れきった体には、素のjavascriptで取得するのは大変だなと思っていたら、namedItem()というのを発見。JavaのDomの解説ですが、下記の通り。

名前を使用して Node を取得します。まず id 属性が一致する Node を検索します。該当しなかった場合は name 属性が一致する Node を検索します。ただし検索対象は name 属性のある要素に限られます。

これで無事にsession取得できました。

追記:document.getElementsByName()で取得しました。namedItem()は、Safariでは動かなかったため。

久々に native の javascriptAjax 処理書いてましたが、Cross-Browser XMLHttpRequest - Web Site Design - Andrew Gregory's Web Pages はさすがに利用した。