0

Hola amigos mi problema es que al intentar mostrar los datos contenidos en un objeto se muestra por pantalla solo el ultimo elemento de la lista, lo curioso es que cuando hago uso del console.log o de document.write si se muestran todos los elementos de la lista, e guardado la información en una variable y nada, lo convertí en una cadena de texto y no funciono, quisiera que me proporcionaran su ayuda por favor de ante mano muchisimas gracias introducir la descripción de la imagen aquí

$(".btnVerVenta").click(function(){
  var idVenta = $(this).attr("idVenta");
  var datos = new FormData();
  datos.append("idVenta", idVenta);
  $.ajax({
    url:"ajax/ajax.php",
    method: "POST",
    data: datos,
    cache: false,
    contentType: false,
    processData: false,
    dataType: "json",
    success: function(respuesta){
  var CadenaJson = respuesta['articulos'];
  var articulosObjeto = JSON.parse(CadenaJson);
  // // $("#agruparArticulos").val(JSON.stringify(agruparArticulos));
       for (var i = 0; i < articulosObjeto.length; i++) {
         $(".prueba").html(
        '<p><b>'+articulosObjeto[i]["descripcion"]+'</b></p>'+
        '<br/>')
        console.log(articulosObjeto[i]["descripcion"]);
    }

    }
  })
})
  • 1
    [JSON != Objeto Javascript](https://es.stackoverflow.com/questions/164943/cu%c3%a1l-es-la-diferencia-entre-json-y-un-objeto-en-javascript) – Pablo Lozano Mar 26 '20 at 20:56
  • En el bucle, en vez de `$(".prueba").html(...)` tendrías que usar `append()`, pues `html()` te cambiará el contenido, mientras que `append` te lo irá agregando a lo que ya hay. De todos modos, no conviene nunca modificar el DOM dentro de bucles, es mejor recoger todo en una variable dentro del bucle y luego fuera de él lo colocas al elemento deseado, de ese modo, modificas el DOM una sola vez, no `N` veces. Si el bucle tiene 1000 elementos modificas el DOM 1000 veces, y si tiene un millón de elementos, pues eso, modificas el DOM 1 millón de veces. Se llama *optimizar* el código. – A. Cedano Mar 26 '20 at 21:09
  • Si me funciona ya entiendo lo que me dices muchisimas gracias – Jonathan Diaz Mar 26 '20 at 21:36

1 Answers1

1

Solo se muestra uno porque estas sobre escribiendo en cada ciclo el valor del $(".prueba").html), lo que debes hacer es tomar el valor existente y agregarle el valor adicional de esta manera

   for (var i = 0; i < articulosObjeto.length; i++) {
     $(".prueba").append(
    '<p><b>'+articulosObjeto[i]["descripcion"]+'</b></p>'+
    '<br/>')
   }
Picardia
  • 615
  • 3
  • 8