Parseでクロスドメイン通信

外部のAPIを呼ぶ時等に"XMLHttpRequest cannot load 〜 is not allowed by Access-Control-Allow-Origin" みたいにエラーになるケースがあります。ajaxでクロスドメイン通信をする際にサーバ側でAccess-Control-Allow-Origin をつけないといけないというやつです。 ただ、外部の場合はそうもいかないのでjsonpを使ったり自前のサーバを介したりする必要があります。後者の自前のサーバを介す際にPHPのサンプルなどはajaxでクロスドメイン通信を実現するphpで見つける事ができたのですがPHP用のサーバを用意するのが面倒という事もあってParseでできるかどうか試したので紹介しておきます。

ちなみにParseとは個人のスマホアプリ開発者がParseを使うべき15の理由の引用ですがMBaaS(Mobile Backend as a Service)で最も有名なサービスの一つです。 Parseの設定は以下のクイックスタートを見て設定しました(ログインしないと見れないかも) JavaScript Developers Guide | Parse

ここのcloud/main.jsを

Parse.Cloud.define("hello", function(request, response) {
  Parse.Cloud.httpRequest({
    url: 'http://www.shigotonavi.co.jp/api/search/',
    params: {
        key: "{しごとナビのアプリkey}",
        spc: request.params.spc,
    },
    success: function(httpResponse) {
      response.success(httpResponse.text);
    },
    error: function(httpResponse) {
      console.error('Request failed with response code ' + httpResponse.status);
    }
  });
});

としています。今回はしごとナビのAPIを使いたかったのでそのようなサンプルですがクライアントからhelloとリクエストを投げるとしごとナビのAPIを叩いてその結果をクライアントへ返しています。spcはしごとナビ側の検索条件なので気にしないでください。

ちなみにクライアント側は

Parse.initialize("{parseのappID}", "parseのjavascript Key");
Parse.Cloud.run('hello', {spc: "001"}, {
  success: function(result) {
    console.log(result);
  },
  error: function(error) {
  }
});

ParseJavascriptSDKのinitializeをしてhelloを叩いてるのみです。簡単。

Parse。こういう柔軟な使い方できるので便利だと思います。