Lingr APIで何か作る日記

Lingr APIを使って何か面白いものが作れないかと試行錯誤する日記です。
 | 

2007-02-12

JavaScriptでJSONPを使う  JavaScriptでJSONPを使う - Lingr APIで何か作る日記 を含むブックマーク はてなブックマーク -  JavaScriptでJSONPを使う - Lingr APIで何か作る日記  JavaScriptでJSONPを使う - Lingr APIで何か作る日記 のブックマークコメント

Webブラウザごにょごにょする前に、JavaScriptでJSONPを簡単に使えるようにします。RailsJavaScriptと言えばprototype.jsなので、prototype.jsでJSONPを扱う方法を調べます。MochiKit で JSONP の利用 - 2nd lifeによると、「prototype.js なら dojoの ScriptSrcIO ライクに拡張したno title」が使えるようです。

リンク先のJavaScriptファイルコピペして、「prototype-json.js」という名前で保存しました。オリジナルのままだと動かなかったので、下記のように修正しています。

$ diff -u aaa.js prototype-jsonp.js
--- aaa.js      2007-02-12 23:36:26.759944464 +0900
+++ prototype-jsonp.js  2007-02-10 10:49:33.145858968 +0900
@@ -40,7 +40,7 @@
     try {
       this.url = url;
       if (this.options.method == 'get' && parameters.length > 0)
-        this.url += (this.url.match(/?/) ? '&' : '?') + parameters;
+        this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;

       Ajax.Responders.dispatch('onCreate', this, this.transport);

@@ -72,9 +72,10 @@
   }
 });

-com.espn.io.ScriptSrcTransport = Class.create();

-com.espn.io.ScriptSrcTransport.prototype = {
+EspnScriptSrcTransport = Class.create();
+
+EspnScriptSrcTransport.prototype = {
        initialize: function()
        {
                if(!document.scriptRequests){ document.scriptRequests = []; }
@@ -100,7 +101,7 @@

                if(jsonParamName)
                {
-                       sep = (/?/.test(url)) ? '&' : '?';
+                       sep = (/\?/.test(url)) ? '&' : '?';

使い方はリンク先に書いてあるとおりです。urlにはJSONPのURLを入れます。

new Ajax.Request(url,
{
	transport: com.espn.io.ScriptSrcTransport,
	jsonParamName: 'callback',
	method: 'get',
	onFailure: this.doClipFailure.bind(this),
	onSuccess: this.showClips.bind(this)
});
 |