La matriz asociativa en bucle for usando jQuery.post() da como resultado que solo se almacene la última entrada

Estoy tratando de extraer contenido xml del servidor usando jQuery.post () en un bucle for en una lista de múltiples nombres de documentos. Solo la última respuesta se almacena con éxito en la matriz asociativa, mientras que las otras entradas terminan indefinido.

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

preguntado el 03 de mayo de 12 a las 20:05

1 Respuestas

Tiene un problema de cierre con su devolución de llamada, por lo que el valor capturado siempre es el último del bucle, especialmente porque se trata de una operación asíncrona.

Debería poder hacer esto:

(function(id, url)
{
    var idInternal = id;
    $.post(url, function(data)
    {
       pagedata[pagenames[idInternal]] = data;
    });
})(i, $xmlToGet);

contestado el 03 de mayo de 12 a las 20:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.