Intentando guardar una matriz recuperada de ajax en una variable global de modo que pueda usarla más adelante pero sigo recibiendo un error indefinido
<script> var items = []; function add(value){ items.push(value); } $(document).ready( function() { $.ajax({ type: 'POST', url: 'xxxx.php', dataType: 'json', cache: false, success: function(result) { for(i=0; i < result.length; i++){ add(result[i]); } }, }); }); document.write(items[1]) </script>Esta es una llamada AJAX asíncrona. La llamada para add se realizará en un momento posterior a la ejecución de document.write(items[1]);
Así que esta es la forma correcta de hacerlo:
<script> var items = []; function add(value){ items.push(value); } $(document).ready( function() { $.ajax({ type: 'POST', url: 'xxxx.php', dataType: 'json', cache: false, success: function(result) { for(i=0; i < result.length; i++){ add(result[i]); } document.write(items[1]) }, }); }); </script>De esta forma, la función que utiliza el resultado se ejecutará cuando se ejecute la función de resultado.
Piénsalo de esta manera: dijiste: Aquí está esta canasta de limones. Luego le pediste a alguien que fuera a algún lado a buscar los limones y antes de que regresara trataste de contar los limones. Entiendo ?
Puede usar ajaxstop para llamar al método después de que se haya completado la solicitud ajax. Coloque la siguiente función en documento listo:
$(document).ajaxStop(function () { document.write(items[1]); });La solución anterior funciona, pero esta es otra opción que utilicé cuando esperaba que se completaran varias funciones de ajax. Esto llamará cada vez que complete una solicitud ajax, pero hay una forma de limitarse a una llamada si es necesario.