0

複数のドキュメント名のリストのforループでjQuery.post()を使用して、サーバーからxmlコンテンツを取得しようとしています。最後の応答のみが連想配列に正常に格納され、他のエントリは未定義になります。

var pagedata  = new Array () ;

loadpagexml = function ( liststring ) {
  var pagenames = liststring.split(',') ;

  for ( var i in pagenames ){
    xmltoget = pagenames[i]+'.xml' ;
    $.post( xmltoget , function(data) { 
      pagedata[ pagenames[i] ] = data ;
    }) ;
  }
}

var listofpages = 'poo,dung,corn' ;
loadpagexml ( listofpages )

>pagedata['poo']
  undefined
>pagedata['dung']
  undefined
>pagedata['corn']
  #document
4

1 に答える 1

3

コールバックでクロージャの問題が発生しているため、特にこれが非同期操作であるため、キャプチャされた値は常にループの最後の値になります。

あなたはこれを行うことができるはずです:

(function(id, url)
{
    var idInternal = id;
    $.post(url, function(data)
    {
       pagedata[pagenames[idInternal]] = data;
    });
})(i, $xmlToGet);
于 2012-05-03T19:05:29.157 に答える