wordpressでJSONP使わずにAjaxクロスドメインしたい

wordpressでJSONP使わずにAjaxクロスドメインしたい

JSONPは嫌い、そんな人は多い(よね?)

だから可能ならどこまでもAccess-Control-Allow-Originの設定だけでJSONを使える環境構築を推奨したい。
条件としてはリクエストを受け取る側のサーバのプログラム(PHP)に手を加えることができることだ。

無料ホスティングのWordpressだときついのかも。

今回は独自ドメイン&レンタルサーバで運用しているWordpressで試してみた。

実装方法

server1のhtmlからserver2においてあるwordpressのajax関数を叩きたいという想定。

server1のhtml

https://gist.github.com/soylatte/4969910.js

ここではjqueryを使って、server2のwpのajax関数を叩いているとする。実際はargの中にjsonデータを入れてある。
今回のサンプルでは使わないのでなくてもOK。

ただし、セキュリティ上の観点から秘密のキーワードみたいな言葉をjsonに入れておいて、wp側でそのキーワードが指定されているかどうかをチェックしてからデータを返すのがwpのajaxの定石っぽい。ここでは関係ないので割愛している。

[wp]functions.php

https://gist.github.com/soylatte/4969897.js

大切なのは、json_encodeをする前にheader関数で、Access-Control-Allow-Originを指定しているところ。
これで疎通できる。