- ベストアンサー
【Javascript文法】prototype.js Ajax.Request onSuccess:に指定するfunctionの書き方
- 質問文章では、Ajax.RequestのonSuccess:に指定するfunctionをprototypeを使って宣言したいという課題があります。
- 具体的には、Ajax.Requestが返してくる引数も使いたいため、this.processRequest(h,1)のように書きたいとのことです。
- このような場合、どのように記述するのがベターなのか、アドバイスを求めています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
bindでOKと言っておきながら動かなかったらあれなのでちょっと試してみました。 関数processRequestを変更しないのであれば、 onSuccess: this.processRequest.bindAsEventListener(this,1) で動くと思います。 関数processRequestの引数の順序を http.prototype.processRequest = function(arg,h){ と変更すれば、 onSuccess: this.processRequest.bind(this,1) で動くと思います。 余談ですが、 > var url="/ruby/hello.cgi"; //実際に検証する為にはwebサーバにこのcgiを置く必要あり ちょこっと実験するだけならcgiスクリプト作らなくても HTMLファイルやTEXTファイルで動作確認できますよ。
その他の回答 (1)
- Werner
- ベストアンサー率53% (395/735)
ええと、こういう場合もあるからと言うことで 前の質問で参考URLを提示しておいたのですが見ましたか? prototype.jsを使ってるならbindを使うのが一番良いでしょうね。 というか使わないなんてもったいない。
お礼
すみません。。 一応読んだのですが。。 >prototype.jsを使ってるならbindを使うのが一番良いでしょうね。 >というか使わないなんてもったいない。 baindで気持ちよく書けました。 (ついでにprototype.jsぽく直しました) var http = Class.create(); http.prototype = { initialize: function(){ this.val=1; this.url="/ruby/hello.cgi"; }, request: function(){ new Ajax.Request(this.url, { method:"get", onSuccess: this.processRequest.bind(this,1) }); }, processRequest: function(arg,h){ alert(this.val+arg); alert(h.responseText); } }; var r = new http(); r.request(); どうも、お世話になりました。
お礼
ご回答ありがとうございます。 Wernerさん。 いつも本当にありがとうございます。 私もその後、いろいろ調べて、 self=this; を以下の前で定義して解決してる人がいました。 onSuccess: function(h){self.processRequest(h,1);} >HTMLファイルやTEXTファイルで動作確認できますよ。 そうですね!! 気が付きませんでした。