prototype.jsのAjax.Requestについて教えて下さい。

<div id=id1></div><a href=javascript:ajax1("id1");>ajaxtest1</a>
<div id=id2></div><a href=javascript:ajax1("id2");>ajaxtest1</a>
という風にajax1というメソッドに要素名を渡しして、AJAX.requestを実行する処理を作りたいと考えています。

そのため、AJAXが成功した場合に、onCompleteで成功後に実行する関数を指定できると思いますが、そいつにも要素名を渡したいです。(ajax1(要素名)⇒Seiko(要素名)の引継ぎ。)

つまり、onComplete:Seiko(要素名,req)という風に2つ引数を渡したいのですが、どうもうまく行きません。

onCompleteで指定する関数に2つ(デェフォルトはrequest結果が渡る)引数を渡すことはできるのでしょうか?無理だった場合にはどういった方法が考えられますでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/03/22 00:03:19
  • 終了:2007/03/29 00:05:02

回答(1件)

id:susie-t No.1

susie-t回答回数99ベストアンサー獲得回数182007/03/22 01:00:14

ポイント60pt

prototype.jsのAjax.RequestのonCompleteに指定できる関数の引数は固定(第一引数がXMLHttpRequestオブジェクト、第二引数がX-JSONヘッダのeval結果)です。

なので、ある関数を指定の引数で実行させたい場合は、その関数を呼び出す関数を作成、それを登録します。

具体的には、以下のようにします。

<html>
<head>
<title></title>
<script language="javascript" src="prototype.js" charset="utf-8"></script>
<script language="javascript">
<!--
function ajax1(id){
  new Ajax.Request(
    'test.txt', 
    { onComplete : function(req){
        Seiko(id, req);
    }
  });
}
function Seiko(id, req){
  $(id).innerHTML = req.responseText;
}
//-->
</script>
</head>
<body>
<div id="test"></div>
<button onclick="ajax1('test');">TEST</button>
</body>
</html>

関数ajax1の変数、引数はonComplete関数内部からも参照可能です。(このスコープ特性をレキシカルスコープと呼ぶそうです。)

参考になれば幸いです。

参考:http://d.hatena.ne.jp/susie-t/20060822/1156212923

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません