jQuery でなんちゃってクロスドメイン POST

概要

Javascript では通常ドメインを乗り越えるアクセス,即ちクロスドメインなアクセスが認められていない.そこで GET リクエストで JSONP  を使ったり,Flash を使ったりして,その制限を乗り越える方法が幾つか有る.実際に jQuery ではクロスドメイン GET に JSONP を用いる事が出来る.

しかし,クロスドメイン POST は jQuery の機能としては用意されていない.幾つかその解決策は存在するのだが,特定の URL に POST でアクセスするだけなので,フォームとインラインフレームを用いて POST リクエストを送る方法を利用することにした.この方法は,リクエストを投げっぱなしになるのでリクエスト結果を取得できないという問題が有るが,その代わり実装が単純明快である.

早速 jQuery のプラグインを書いてみた.少々冗長な気もするが,気にしないことにする.

コード

$.extend({
  xpost : function(url, callback) {
    var name = 'dummyxpostframe';
    var flush = function() {
      $('form[target=' + name + ']').remove();
      $('iframe[name=' + name + ']').remove();
    }
    var iframe = $('<iframe />').attr('name', name).hide().appendTo('body');
    if(typeof callback == 'function') iframe.load(callback);
    iframe.load(flush);
    $('<form method="POST" />').attr('action', url).attr('target', name)
    .hide().appendTo('body').submit();
  }
});

ダウンロード

使い方

jQuery と共に jQuery.xpost.min.js またはjQuery.xpost.js をロード.

$.xpost(url, callback)

  • url : POST リクエストを送る URL
  • callback : リクエスト結果を受信した時に実行される関数 (省略可能)
  • 面倒だという理由で data を未実装.ToDo.

ライセンス

パブリックドメイン

実装

  1. ターゲットとなる隠しインラインフレームを作成
  2. コールバック関数が指定されていればインラインフレームのロードイベントハンドラに指定
  3. インラインフレームのロードイベントハンドラでインラインフレームとフォームを消すように設定
  4. インラインフレームをターゲットにした POST フレームを作成
  5. POST 送信

関連 URL

MOONGIFT: » jQueryを使ってクロスドメインのAjax「jQuery CrossDomain」:オープンソースを毎日紹介
Flash を用いる方法.ダウンロード先不明.
Ajax – opensocial-jquery – jQuery.ajax のすべてのリクエストをガジェットサーバのプロキシに中継します。互換性を保持しつつ、クロスドメイン制約を開放します。 – Project Hosting on Google Code
プロキシサーバを経由する方法.