Comunidad de diseño web y desarrollo en internet online

Variables locales y globales en JavaScript

Citar            
MensajeEscrito el 09 Mar 2012 12:46 am
Que tal amigos, estoy desarrollando una pequeña aplicacion de AJAX que va a un archivos php y depues deveria pasar lo que este responde a una variable para ser usado mas tarde, el problema es que no logro pasar la variable del eventos success de $.ajax() a otra variable, aquie el codigo:


Código Javascript :

   
var respuesta='' //se supone que esto hace a la variable global
$.ajax({
      url: 'mysfunciones.php',
      method: 'GET',
      dataType: 'jsonp',
      data:'',
      success: function(datos){respuesta=datos; alert(respuesta.parametro1);}, //hasta aca todo bien
      error: function(jqXHR, textStatus, errorThrown){alert('Ocurrio un error al cargar el contenido, por favor intentelo nuevamente. Informacion: '+ textStatus+' Trown: '+errorThrown);}
      });
   alert(respuesta.parametro1); // aca el problema, muestra y devuelve "undefined"
    return respuesta;
   }


Como ven mi problema es que no se como pasar lo que responde AJAX a la variable que regresa la funcion, segun he leido este se debe a que en JS las variables se declaran de nuevo en cada funcion por eso la declaro al principio, pero no funciona, alguien me ayuda?? :)

Por cranecx

21 de clabLevel



Genero:Masculino  

Desarrollador Web

chrome
Citar            
MensajeEscrito el 10 Mar 2012 12:06 am
Intenta borrar cuando defines "respuesta" (la línea en que pones var resp...). Luego, remplaza "respuesta=datos" por "var respuesta=datos".
No estoy muy seguro de que sea la manera de hacerlo pero nada se pierde con probar.

Por Night~

43 de clabLevel



Genero:Masculino  

Geek, Gamer, Otaku

chrome
Citar            
MensajeEscrito el 10 Mar 2012 04:31 am
Respuesta debería ser un objeto no un string:

Código Javascript :

var respuesta = {};

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

firefox
Citar            
MensajeEscrito el 13 Mar 2012 12:37 am
Yo he tenido esos problemas tambien. Normalmente no me gusta quedarme con la duda pero no he tenido tiempo de investigar esa situacion. Respecto a como inicializar tus variables puedes hacerlo con null y asi te evitas problemas de tipos de datos. Claro si vas a pasar arreglos o datos JSON puedes inicializar tus variables sin "nada" por asi decirlo.
var arreglo = []; o var arreglo = {};

Tambien te aconsejo que en vez de usar alerts para ver el contenido de tus variables uses console.log() claro si usas Firebug o Chrome.

Por Kenkyo

7 de clabLevel



Genero:Masculino  

Programador, Ciclista, Igenioso

firefox
Citar            
MensajeEscrito el 13 Mar 2012 03:11 pm

Kenkyo escribió:

Tambien te aconsejo que en vez de usar alerts para ver el contenido de tus variables uses console.log() claro si usas Firebug o Chrome.

...O Opera.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 13 Mar 2012 04:10 pm
Gracias a todos por sus respuestas, pero sigo teniendo el mismo problema, hice lo que comento The Fricky! pero no lo he solucionado, el problema sigue siendo que no se pueden pasar los datos entre funciones...

La idea es esta:

Código Javascript :

function gurl(idevent){
    var respuesta={};
   alert(idevent);
   $.ajax({
      url: 'funciones.php',
      method: 'GET',
      dataType: 'jsonp',
      data:'',
      success: function(datos){respuesta=datos; console.log(respuesta.parametro1);}, //hasta aca bien
      error: function(jqXHR, textStatus, errorThrown){alert('Ocurrio un error al cargar el contenido, por favor intentelo nuevamente. Informacion: '+ textStatus+' Trown: '+errorThrown);}
      });
    return respuesta;
   }

var datos=gurl(89); //aca obtengo 'undefined'


Alguien sabe que hago mal?

Por cranecx

21 de clabLevel



Genero:Masculino  

Desarrollador Web

chrome
Citar            
MensajeEscrito el 14 Mar 2012 02:42 pm
Ya recordé por que pasa eso haha.
El problema es que mientras se ejecuta el ajax, el código de javascript se sigue ejecutando (por eso es asynchronous).
Prueba poniendo el return en la función success.

Por Night~

43 de clabLevel



Genero:Masculino  

Geek, Gamer, Otaku

chrome
Citar            
MensajeEscrito el 21 Mar 2012 03:05 pm
Lo que sucede es que tu "ajax" se procesa en paralelo (asyncrono) por eso la funcion retorna el valor antes de que el "ajax" termine de procesarse , basta con que pongas el paremetro "async: false" en el segundo codigo que posteaste y listo =).

aqui tuvieron un problema similar al tuyo:

[url= http://foros.cristalab.com/demorar-return-de-una-funcion-t104620/][/url]

Por gio.vl

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Mar 2012 06:54 pm

gio.vl escribió:

Lo que sucede es que tu "ajax" se procesa en paralelo (asyncrono) por eso la funcion retorna el valor antes de que el "ajax" termine de procesarse , basta con que pongas el paremetro "async: false" en el segundo codigo que posteaste y listo =).

aqui tuvieron un problema similar al tuyo:

[url= http://foros.cristalab.com/demorar-return-de-una-funcion-t104620/][/url]

Por cranecx

21 de clabLevel



Genero:Masculino  

Desarrollador Web

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.