3

さて、ここで楽しい問題です。次のようなオブジェクト配列があります。

objRequests = [
   {
      url: "/cgi-bin/script1.cgi",
      dest: "#div1"
   },
   {
      url: "/cgi-bin/script1.cgi",
      dest: "#div2"
   }
];

ここで、これらのオブジェクトを繰り返し処理して、jQuery の $.getJSON() メソッドを使用してサーバーから特定のアドレスに情報を読み込みます。コールバック関数を使って手の込んだ操作を行った後、'dest' で指定された ID を持つ div に HTML を配置する必要があります。 .

通常、コールバックに追加のデータを指定する必要がある場合は、無名関数を使用しますが、これは問題なく機能します。ここでの問題は、destination の変数ポインターが同じままであるように見えるため、各コールバックが起動するときに、destination が常に "#div2" に等しいことです。

私は次のことを試しました:

for (var loop = 0; loop < objRequest.length; loop++)
{
    var exec = new function(objResponse)
    {
       processResponse(objResponse, objRequest[loop].dest);
    }

    exec.dest == objRequest[loop].dest;

    $.getJSON(objConfig.strTicketScript, exec);
}

としても

for (var loop = 0; loop < objRequest.length; loop++)
{
    var destination = objRequest[loop].dest;

    var exec = new function(objResponse)
    {
       processResponse(objResponse, destination);
    }

    exec.dest == objRequest[loop].dest;

    $.getJSON(objConfig.strTicketScript, exec);
}

しかし、何らかの理由で Firefox はまだ匿名関数で個別のデータを作成していないようです。各反復でデータへの一意の参照を取得する方法はありますか?

4

1 に答える 1

3

閉鎖を行う必要があります。

var exec = (function(dest){
  return function(objResponse) {
     processResponse(objResponse, dest);
  }
 })(objRequest[loop].dest);
于 2010-06-22T21:08:52.803 に答える