Foros del Web » Programando para Internet » Javascript » Frameworks JS »

[SOLUCIONADO] Problema retorno array en función

Estas en el tema de Problema retorno array en función en el foro de Frameworks JS en Foros del Web. Hola a todos. Estoy atascado en una situación que no tiene sentido. Tengo esta función: Código: function ajax(datos,url){ if (confirm('¿Desea proceder?')){ var valores= new Array(2); ...
  #1 (permalink)  
Antiguo 09/05/2017, 01:06
 
Fecha de Ingreso: septiembre-2015
Mensajes: 21
Antigüedad: 4 años, 6 meses
Puntos: 0
Problema retorno array en función

Hola a todos.

Estoy atascado en una situación que no tiene sentido.
Tengo esta función:

Código:
function ajax(datos,url){	
 if (confirm('¿Desea proceder?')){ 
	 var valores= new Array(2);	
		$.ajax({
			type:'POST',
 			url:url,
 			data:datos,
 			beforeSend: function(){
				 console.log("Espere...");
			 },
 			dataType: "json",
 			success: function (data) {
				console.log(data.success);
				alert(data.success);
				valores[1]= data.id;				
 			},
 			error: function (XMLHttpRequest, textStatus, errorThrown) {
				valores[0]=1;
 			   	alert('ERROR: No se ha podido realizar la acción.');
			   
			   
 			}
		}); //Fin ajax		
	return valores;
 }
}
La cual ejecuta en Jquery ajax y devuelve un array.

Aquí la función que llama a ajax():

Código:
function nuevo_trabajador(){ 
    var res = new Array(2);                
    res = ajax($('#insertar').serialize(),'index_ajax.php?controlador=gastos/gastos&accion=insertar_trabajador');
//Si quito alert no me devuelve bien los parámetros
    alert(res[1]);    
    if (res[0]===0){
       [...]    
   }
}
Lo que ocurre es que cuando quito el alert no me devueve los parámetros, en cambio si ejecuto el alert el array "res" coge correctamente los datos, y no sé por que.

¿Podéis echarme una mano por favor?
Muchas gracias.
  #2 (permalink)  
Antiguo 09/05/2017, 01:32
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.433
Antigüedad: 8 años, 4 meses
Puntos: 934
Respuesta: Problema retorno array en función

Estás realizando ejecuciones síncronas cuando AJAX trabaja de forma asíncrona. Puedes realizar tus operaciones en el callback success o pasarle como argumento una función a la función (una llamada de retorno o callback) de tal manera que puedas especificar un conjunto de acciones independiente por cada llamada.

Por ejemplo:
Código Javascript:
Ver original
  1. ajax("url", "datos", function(respuesta){
  2.     //Acciones
  3. }, function(xhr){
  4.     //En caso de error
  5. });
  6.  
  7. ajax("otra url", "otros datos", function(respuesta){
  8.     //Otras acciones
  9. }, function(xhr){
  10.     //En caso de error
  11. });
  12.  
  13. //...
  14.  
  15. function ajax(url, datos, callback, error){
  16.     $.ajax({
  17.         url: url,
  18.         data: datos
  19.         //Más propiedades
  20.     }).done(callback).fail(error);
  21. }

__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #3 (permalink)  
Antiguo 09/05/2017, 03:06
 
Fecha de Ingreso: septiembre-2015
Mensajes: 21
Antigüedad: 4 años, 6 meses
Puntos: 0
Respuesta: Problema retorno array en función

Gracias Alexis88.

Al final lo he solucionado de esta forma:

Código:
function ajax(datos,url,funcion,id){	
 if (confirm('¿Desea proceder?')){ 
	 var valores= new Array();
	 valores[0]=0;
	 valores[1]=0;	
		$.ajax({
			type:'POST',
 			url:url,
 			data:datos,
 			beforeSend: function(){
				 console.log("Espere...");
			 },
 			dataType: "json",
 			success: function (data) {
				console.log(data.success);
				alert(data.success);
				valores[1]= data.id;
				if(valores[1]=='' || valores[1]==null){
					valores[1]=id;
				}
				funcion(valores);
 			},
 			error: function (XMLHttpRequest, textStatus, errorThrown) {
				valores[0]=1;
 			   	alert('ERROR: No se ha podido realizar la acción.');
			   
			   
 			}
		}); //Fin ajax		
	
 }
}
Y en el formulario donde lo llamo:

Código:
<button onclick=\"event.preventDefault();ajax($('#form_trabajador".$array['id_mod_trabajdor']."').serialize(),'index_ajax.php?controlador=gastos/gastos&accion=eliminar_trabajador',quitar,".$array['id_mod_trabajdor'].");\" class='glyphicon glyphicon-remove'/>
El error estaba donde me comentaste, no tuve en cuenta la asincronía de ajax.
Muchas gracias.
Saludos.

Etiquetas: javascript, json, retorno, text, url
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:56.