Foros del Web » Programando para Internet » Javascript »

Retornar respuesta Ajax en JSON

Estas en el tema de Retornar respuesta Ajax en JSON en el foro de Javascript en Foros del Web. hola compañeros nuevamente yo... tengo esta funcion @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original function PeticionJSON ( url , datos ) {       ...
  #1 (permalink)  
Antiguo 04/10/2011, 10:29
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 7 meses
Puntos: 76
Retornar respuesta Ajax en JSON

hola compañeros

nuevamente yo...

tengo esta funcion

Código Javascript:
Ver original
  1. function PeticionJSON(url,datos){
  2.  
  3.     rand = parseInt(Math.random()*99999999);
  4.     peticion.open("GET",url + "?" +  datos   + "&rand=" + rand,true);
  5.     peticion.onreadystatechange = function(){
  6.        
  7.            if(peticion.readyState == 4){
  8.                      if(peticion.status == 200){
  9.                          
  10.                         return  peticion.responseText;
  11.                    
  12.                                    
  13.                     }else{
  14.                         alert("Error al procesar la solicitud en el servidor" + peticion.statusText); // cuando falla algo en la solicitud
  15.                     }
  16.                  }
  17.             }
  18.     peticion.send(null);


la llamo asi:

Código Javascript:
Ver original
  1. var response_json = PeticionJSON(url,datos);
  2. alert(response_json);

peticion.responseText retorna un objeto en JSON asi:

{"tipo_alerta":"success","mensaje":"Registro guardado con Exito"}

... lo que quiero es almacenar el resultado de la funcion en una variable, en este caso response_json
pero no me funciona, cuando sale el alert dice undefined....

Me podrian colaborar ...... gracias

  #2 (permalink)  
Antiguo 04/10/2011, 11:59
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 11 meses
Puntos: 81
Respuesta: Retornar respuesta Ajax en JSON

Pues lamento decirte que eso no se puede, la razón es que cuando tú haces esto:

peticion.onreadystatechange = function(){
....
}

estás definiendo qué es lo que se va a ejecutar cuando la petición vuelva, pero la función PeticionJSON ya ha terminado de ejecutarse. Termina de ejecutarse pero todavía no llega ningún valor. Por eso y por otras cosas más no se puede hacer eso, así no trabaja Ajax.
  #3 (permalink)  
Antiguo 04/10/2011, 12:58
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 6 meses
Puntos: 1012
Respuesta: Retornar respuesta Ajax en JSON

la respuesta la tienes almacenada en la variable response_json, pero si lo que realmente quieres es alertar la respuesta
Cita:
alert(PeticionJSON(url,datos));
  #4 (permalink)  
Antiguo 04/10/2011, 20:23
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 7 meses
Puntos: 76
Respuesta: Retornar respuesta Ajax en JSON

Hola

ok, muchas gracias por sus sugerencias y recomendaciones.... se que fue una idea como un poco fuera de base, y si creo que no se puede de esa manera, gracias por la ayuda...

  #5 (permalink)  
Antiguo 04/10/2011, 20:47
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Retornar respuesta Ajax en JSON

buenas,
en realidad puedes hacerlo, solo que en lugar de hacer una petición asíncrona, debería ser síncrono. en el tercer parámetro de open debes indicar false para este tipo de petición. luego al final de la función debes devolver la respuesta de la petición. fijate que no me refiero del evento onreadystatechange, sino de tu función. si quieres hacer la petición asíncrona, no tiene sentido devolver la respuesta en el evento porque no hay forma de indicarle un capturador para lo devuelto por un evento. tienes que pensar más en el modelo event-driven. cuando tengas la respuesta de la petición, entonces invocar una función para procesar la respuesta.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #6 (permalink)  
Antiguo 05/10/2011, 06:43
 
Fecha de Ingreso: octubre-2011
Ubicación: Chile
Mensajes: 9
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Retornar respuesta Ajax en JSON

las peticiones ajax no retornan resultados, lo que debes hacer es crear una variable dentro de la peticion y recuperarla fuera,

Código Javascript:
Ver original
  1. var response_json;
  2.  
  3. function PeticionJSON(url,datos){
  4.  
  5.     rand = parseInt(Math.random()*99999999);
  6.     peticion.open("GET",url + "?" +  datos   + "&rand=" + rand,true);
  7.     peticion.onreadystatechange = function(){
  8.        
  9.            if(peticion.readyState == 4){
  10.                      if(peticion.status == 200){
  11.                          
  12.                        response_json =  peticion.responseText;
  13.                    
  14.                                    
  15.                     }else{
  16.                         alert("Error al procesar la solicitud en el servidor" + peticion.statusText); // cuando falla algo en la solicitud
  17.                     }
  18.                  }
  19.             }
  20.     peticion.send(null);
  #7 (permalink)  
Antiguo 05/10/2011, 07:50
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Retornar respuesta Ajax en JSON

@socialk, en tu modelo, ¿cómo va saber cuándo la petición finalizó? porque bien se asigna la respuesta a la variable pero no se puede continuar de inmediato.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #8 (permalink)  
Antiguo 06/10/2011, 05:20
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 7 meses
Puntos: 76
Respuesta: Retornar respuesta Ajax en JSON

Hola compañeros ....


como alternativa que me dieron lo hice asi y me funciono:


Código Javascript:
Ver original
  1. peticionJSON = function(url,datos){
  2.     var response_json = null;
  3.     peticion.open("GET",url+"?"+datos,false);
  4.     peticion.onreadystatechange = function(){
  5.             if(peticion.readyState == 4){
  6.                 if(peticion.status == 200){
  7.                 response_json = peticion.responseText;//  esto retorna [{"nombre":"informacionsys"}]
  8.                 }else{
  9.                     alert("Failed Server");
  10.                 }
  11.             }
  12.         }
  13.     peticion.send(null);
  14.     return response_json;  
  15. }
  16.  
  17.  
  18. // ejecuto la funcion
  19. var responseJSON = peticionJSON("response.php","nameuser=informacionsys");
  20. var objJSON = eval(responseJSON);
  21. alert(objJSON[0].nombre);


Gracias a todos... y pues cualquier sugerencia respecto al codigo por favor no duden en comunicarme.


Gracias
  #9 (permalink)  
Antiguo 06/10/2011, 05:30
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 6 meses
Puntos: 1012
Respuesta: Retornar respuesta Ajax en JSON

alternativas al uso de eval()
  #10 (permalink)  
Antiguo 06/10/2011, 05:42
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 7 meses
Puntos: 76
Respuesta: Retornar respuesta Ajax en JSON

Hola

pues use la libreria JSON pero me presenta conflicto con la libs de jAlerts de Jquery...

que desventaja puede tener eval()???

Gracias.


  #11 (permalink)  
Antiguo 06/10/2011, 09:25
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 11 meses
Puntos: 81
Respuesta: Retornar respuesta Ajax en JSON

A ver, un eval es inseguro, aunque usándolo con Ajax veo muy improbable que alguien la pueda usar para algún otro fin. Sin embargo la seguridad se trata de tener cierta paranoía por eso es válido decir que aún en este caso es inseguro. Las librerías JSON también usan eval pero antes se aseguran de que el texto sea solo un formato JSON y nada más. Esa es la ventaja.

Etiquetas: ajax, funcion, js, json, respuesta, retornar
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 02:49.