$.ajaxでYQL経由のクロスドメインリクエストを可能にするjQueryプラグインを作りました
jQueryでAjaxを行う$.ajax関数に、Yahoo Query Language APIを利用したクロスドメインAjax機能を追加するjQuery Pluginを作りました。ソースはgithubにあります。
https://github.com/yatt/jquery.xdomainrequest
インクルードするとこんな感じでクロスドメインのリクエストができるようになります。
$.ajax({ url: ['http://externalsite.com/x.json', 'http://ex.jp/y.json'] dataType: 'xdomain:json' success: function(data){ console.log(data[0].result.count) // x.json console.log(data[1].user.id) // y.json } })
- jquery.base64(https://github.com/yatt/jquery.base64)に依存しています。
- dataTypeの頭に'xdomain:'をつけるとYQL経由で外部ドメインのリソースを取得できます。
- その際に、引数のurlにはStringの他にArrayを渡せるようになります。YQLでは一度のAPI呼び出しで複数のリソースを取得できるので、API呼び出しの際に複数のurlを指定することでAPIの呼び出し回数を抑えてより多くのデータを取得できます。(一度のリクエストに対してbase64エンコードされたレスポンスのデータ量が256KB以下という制限はあるみたいですが。)
- jquery.zip.inflate(https://github.com/yatt/jquery.zip.inflate)をインクルードしておくと、dataTypeに'xdomain:zip'と指定した際に、'zip'と指定した場合同様、アーカイブを自動でObjectに変換します。
$.ajax({ url: 'http://ex.com/x.zip', dataType: 'xdomain:zip', success: function(data){ console.log(data.files) // file names in zip archive // get text content console.log(data.files['tmp/hello.txt'].inflate()) } })