Foros del Web » Programando para Internet » Jquery »

Problema funcion $.ajax() en jquery 1.4

Estas en el tema de Problema funcion $.ajax() en jquery 1.4 en el foro de Jquery en Foros del Web. Hola. Pues eso, que tenía un código en mi web que usaba esta función (que no recuerdo de donde saqué) y puse jquery 1.4 para ...
  #1 (permalink)  
Antiguo 19/01/2010, 05:29
 
Fecha de Ingreso: diciembre-2009
Mensajes: 40
Antigüedad: 14 años, 11 meses
Puntos: 0
Problema funcion $.ajax() en jquery 1.4

Hola.

Pues eso, que tenía un código en mi web que usaba esta función (que no recuerdo de donde saqué) y puse jquery 1.4 para intentar mejorar el rendimiento, ya que al parecer la 1.4 es bastante mejor que la 1.3.2.

Total, que yo no tengo mucha idea de JS ni se donde ir ahora a buscar la solución a mi problema.

Pego el código a ver si alguien puede aportarme alguna solución:
Código:
		function register(){
			hideshow('loading',1);
			error(0);
			$.ajax({type: "POST",url: "<?php echo $url_completa;?>pagina/act_contacto/1",data: $('#form_contacto').serialize(),dataType: "json",success: function(msg){
				if(parseInt(msg.status)==1){window.location=msg.txt;}else if(parseInt(msg.status)==0){error(1,msg.txt);}
				hideshow('loading',0);
			}});
		}
		function hideshow(el,act){
			if(act) $('#'+el).css('visibility','visible');
			else $('#'+el).css('visibility','hidden');
		}
		function error(act,txt){
			hideshow('error',act);
			if(txt) $('#error').html('<p class="error_form">'+txt+'<\/p>');
		}
Lo imporante es la función $.ajax(). Lo que hace es llamar a un fichero php en el que se realizan una serie de comprobaciones y en el caso de ser erroneas devuelve un 0 y un 1 si ha sido correcta, como muestra el siguiente código:
Código:
die('{status:0,txt:"El departamento seleccionado no existe en nuestra base de datos."}');
die('{status:1,txt:"'.$path_completo.'pagina/fin_contacto"}');
No se si alguien puede darme alguna pista sobre como solucionar mi problema.

Muchísimas gracias.
  #2 (permalink)  
Antiguo 19/01/2010, 05:58
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Tema movido desde javascript
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 19/01/2010, 09:05
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Problema funcion $.ajax() en jquery 1.4

Hola! Que noticia esta del jquery 1.4 . No se que cambios haya, pero veamos tu codigo.

En donde esta problema? Hagamos un alert para comprobar que recibis respuesta:

Cita:
$.ajax({

type: "POST",

url: "<?php echo $url_completa;?>pagina/act_contacto/1",

data: $('#form_contacto').serialize(),

dataType: "json",

success: function(msg){

alert(msg.status);

if(parseInt(msg.status)==1){window.location=msg.tx t;}

else if(parseInt(msg.status)==0){error(1,msg.txt);}; // aqui faltaba un punto y coma

hideshow('loading',0);
}}
  #4 (permalink)  
Antiguo 19/01/2010, 11:28
 
Fecha de Ingreso: diciembre-2009
Mensajes: 40
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Problema funcion $.ajax() en jquery 1.4

Mi problema es que no hace la llamada a la función ajax.
Ya puse un alert en la primera linea de esta función y nada, justo antes si, pero no durante. Pongo el alert como primera linea a ejecutar dentro de la función ajax pero no llega a ejecutarlo, se queda pensando y no sale nunca de ahí. Como digo, en la 1.3.2 funciona correctamente pero no en la 1.4.

Tal vez simplemente se comporte como debe. Puede ser que la función esté mal escrita o se tenga que usar de otra manera, a saber. Pero ya digo que no tengo ni idea de como mirarlo.

Muchas gracias.
  #5 (permalink)  
Antiguo 19/01/2010, 13:22
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Problema funcion $.ajax() en jquery 1.4

Fijate en internet explorer que error te da. Seguro que las otras dos funciones no estan originando un corte en el flujo del programa?

Estoy leyendo algo sobre la version 1.4 No profundizando. Pero no veo cambios relevantes en ajax, por ahora.

http://www.anieto2k.com/2010/01/15/j...in-vio-la-luz/

http://jquery14.com/ // sitio oficial
  #6 (permalink)  
Antiguo 19/01/2010, 14:52
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Problema funcion $.ajax() en jquery 1.4

Aca hay mas data:
http://api.jquery.com/category/version/1.4/

Es un listado de los metodos que han cambiado en algo. Y ajax no figura, o sea que sigue siendo igual.

Vuelvo a decir: fijate en internet explorer que error te da. En que linea hay error.
  #7 (permalink)  
Antiguo 21/01/2010, 03:55
 
Fecha de Ingreso: diciembre-2009
Mensajes: 40
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Problema funcion $.ajax() en jquery 1.4

Hola.

Ni explorer ni Firefox muestran ningún error de javascript, por lo que el código debe estar bien.
Código Javascript:
Ver original
  1. function register(){
  2.             hideshow('loading',1);
  3.             error(0);
  4.             alert("antes del ajax");
  5.             $.ajax({type: "POST",url: "<?php echo $url_completa;?>pagina/act_contacto/1",data: $('#form_contacto').serialize(),dataType: "json",success: function(msg){alert("dentro del sucess");
  6.                 if(parseInt(msg.status)==1){window.location=msg.txt;}else if(parseInt(msg.status)==0){error(1,msg.txt);}
  7.                 hideshow('loading',0);
  8.             }});
  9.         }
Pongo dos mensajes, uno antes de la llamada a la función, que lo muestra y otro dentro de la función, que no lo llega a mostrar nunca.

Sinceramente no se que puede estar pasando.

Muchas gracias.
  #8 (permalink)  
Antiguo 21/01/2010, 07:12
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Problema funcion $.ajax() en jquery 1.4

Entonces recomendaría o volver a la 1.3.2 o ver que pasa con esto:

Cita:
beforeSend: function(){ alert("before") };

success: function(msg){alert( "success: "+msg) },

error: function(a){ alert("error: "+a) };
  #9 (permalink)  
Antiguo 21/01/2010, 11:38
 
Fecha de Ingreso: diciembre-2009
Mensajes: 40
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Problema funcion $.ajax() en jquery 1.4

A ver, estoy mirando la web de www.json.org porqué podría ser que fuera un problema de construcción de la cadena que le estoy devolviendo. Ya que el error que me muestra el código que ha posteado "mayid", me devuelve un "parseerror, 200".

He separado todo el código para mostraros lo básico que hace la web.

Mi código web es el siguiente:
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
  4.     <title>Prueba contacto</title>
  5.     <base href="http://servidor/" />
  6.     <link rel="stylesheet" rev="stylesheet" href="css/styles.css" type="text/css" />
  7.     <!--<script type="text/javascript" src="js/jquery-1.4.min.js"></script>-->
  8.     <!--<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>-->
  9.     <script type="text/javascript" src="js/jquery-1.4.min.js"></script>
  10.     <script type="text/javascript">
  11.     //<![CDATA[
  12.         $(document).ready(function(){
  13.             $('#form_contacto').submit(function(e) {register();e.preventDefault();});
  14.         });
  15.         /*
  16.         function register(){
  17.             hideshow('loading',1);
  18.             error(0);
  19.             $.ajax({type:"POST",url:"pagina/act_contacto_prueba/1",data: $('#form_contacto').serialize(),dataType:"json", success: function(msg){alert("llega");
  20.                 //if(parseInt(msg.status)==1){window.location=msg.txt;}else if(parseInt(msg.status)==0){error(1,msg.txt);}
  21.                 //hideshow('loading',0);
  22.             }});
  23.         }*/
  24.         function register(){
  25.             hideshow('loading',1);
  26.             error(0);
  27.             $.ajax({type:"POST",url:"pagina/act_contacto_prueba/1",data: $('#form_contacto').serialize(),dataType:"json", contentType: "application/json",
  28.                 beforeSend: function(x){ alert("antes")},
  29.                 success: function(msg){alert( "success: "+msg) },
  30.                 error: function(a, p){ alert("error: "+p)
  31.                 //if(parseInt(msg.status)==1){window.location=msg.txt;}else if(parseInt(msg.status)==0){error(1,msg.txt);}
  32.                 //hideshow('loading',0);
  33.             }});
  34.         }
  35.         function hideshow(el,act){
  36.             if(act) $('#'+el).css('visibility','visible');
  37.             else $('#'+el).css('visibility','hidden');
  38.         }
  39.         function error(act,txt){
  40.             hideshow('error',act);
  41.             if(txt) $('#error').html('<p class="error_form">'+txt+'<\/p>');
  42.         }
  43.     //]]>
  44.     </script>
  45. </head>
  46. <form name="form_contacto" id="form_contacto" action="pagina/act_contacto_prueba" method="post">
  47.     <label for="nombre">Nombre:</label><input type="text" name="nombre" id="nombre"  tabindex="10"/><br /><br class="medialinea" />
  48.     <label for="email">E-mail:</label><input type="text" name="email" id="email"  tabindex="11"/><br /><br class="medialinea" />
  49.     <label for="telefono">Tel&eacute;fono:</label><input type="text" name="telefono" id="telefono"  tabindex="12"/><br /><br class="medialinea" />
  50.     <label for="consulta">Consulta:</label><textarea name="consulta" id="consulta" rows="3" cols="65" tabindex="14"></textarea>
  51.     <?php if(isset($_GET["var3"])){?>
  52.         <p class="error_form">
  53.             <?php if($_GET["var3"] == 1){?>Los campos marcados con * son obligatorios.
  54.             <?php }elseif($_GET["var3"] == 2){?>Debe introducir un e-mail valido.
  55.             <?php }elseif($_GET["var3"] == 3){?>Debe seleccionar el departamento al que dirige su consulta.
  56.             <?php }elseif($_GET["var3"] == 4){?>La pregunta de seguridad no se ha contestado correctamente.
  57.             <?php }?>
  58.         </p>
  59.     <?php }else{?>
  60.         <div id="error"><p class="error_form">Los campos marcados con * son obligatorios.</p></div>
  61.     <?php }?>
  62.     <input class="boton" type="submit" name="enviar" id="enviar" value="Enviar&nbsp;&nbsp;" tabindex="16" style="margin-right:6px;"/><img id="loading" src="img/ajax.gif" alt="enviando..." />
  63. </form>
Uso urls amigables, por eso los enlaces son así. Se seguro que pasa por el php al que estoy llamando, porque si desactivo javascript, tengo hecho el php de forma que me devuelva a la web en la que estoy mostrandome un error.
Lo que devuelvo en el php es lo siguiente:
Código PHP:
Ver original
  1. die("{status:0,txt:\"Los campos marcados con * son obligatorios.\"}");

Si alguien lo prueba y me sabe decir que es lo que está petando me hará un gran favor.

RESPUESTA:
Mientras escribia el post y lo enviaba (que solo he tardado 1 hora entre interrupciones y mas historias), he encontrado la solución.
El problema está en que el mensaje que le devolvía no era un mensaje json bien escrito.
Así que
Código PHP:
Ver original
  1. die("{status:0,txt:\"Los campos marcados con * son obligatorios.\"}");
funciona con jquery 1.3.2 pero no con jquery 1.4
El mensaje que devuelvo ahora es:
Código PHP:
Ver original
  1. die('{"status":"0","txt":"Los campos marcados con * son obligatorios."}');

SOLUCIONADO
  #10 (permalink)  
Antiguo 21/01/2010, 12:19
 
Fecha de Ingreso: diciembre-2009
Mensajes: 46
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Problema funcion $.ajax() en jquery 1.4

Hola que tal yo tenia el mismo problema no se ejecuta la funcion success.
Todo era origen de la forma en que el lenguaje del lado del servidor regresaba el dato json.

En tu caso veo que estas trabajando con php, no es mi fuerte pero por lo que he mirado
en el archivo php tines que poner un header(text/json)

Aparte

echo(encode_json($valirable))

Algo haci te regresa un json. Investiga bien esta parte. Saludos suerte
  #11 (permalink)  
Antiguo 21/01/2010, 13:46
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Problema funcion $.ajax() en jquery 1.4

Yo recomiendo siempre correr el script PHP por si mismo, y ver en pantalla que imprime. Sabiendo como se tiene que ver un juego de variables json, se puede resolver el lado servidor.

No es tan facil a veces construir "arrays" json, pero hay que chequear que el problema no venga del lado servidor.

Me alegro esté resuelto. Saludos
  #12 (permalink)  
Antiguo 25/01/2010, 09:29
 
Fecha de Ingreso: diciembre-2009
Mensajes: 40
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Problema funcion $.ajax() en jquery 1.4

Hola.

Posteo la solución al problema, que ya postee el jueves pero algo pasó que no llegó la respuesta :P

El problema era que estaba mal formateado el mensaje de respuesta json.
Lo que devuelvo ahora es:
Código PHP:
Ver original
  1. die('{"status":"0","txt":"Los campos marcados con * son obligatorios."}');
Como podeis observar tanto el "nombre" como el "valor" de las variables, van entre comillas, cosa que antes, poniendo el mensaje entero entre comillas, jquery lo entendía igual.

Se puede dar el post como solucionado. Si es que funciona así, que no lo se :P

Muchas gracias a todos por las respuestas.
  #13 (permalink)  
Antiguo 02/03/2010, 03:12
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 20 años, 2 meses
Puntos: 1
Respuesta: Problema funcion $.ajax() en jquery 1.4

Ante todo buenos dias a todos.

Una Prengunta al respecto del json al momento de devolver los datos a javascript

Tengo algo parecido a Joaquin211

Código PHP:
die('{"status":"0","txt":"Los campos marcados con * son obligatorios."}'); 
a esto le he añadido los siguiente :

Código PHP:
die('{"status":"0","txt":"Los campos marcados con * son obligatorios.","contenido":"'.func_mostrar().'"}'); 
y func_mostrar es una funcion que mediante una plantilla muestra codigo html
Código PHP:
<?
function func_mostrar()
{
?>
    <form id="frmDatosGenerales" name="frmDatosGenerales" method="post" accept-charset="utf-8" action="./index.php">
          <table class="tabla_info_hotel">
            <tr>
              <td width="25%"><img src="./img/campo_obligatorio.jpg" />Nombre </td>
              <td width="75%"><input name="NOMBRE" id="NOMBRE" type="text" size="60" value="" /> </td>
            </tr>
            <tr>
              <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P&aacute;gina web&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://</td>
              <td><input name="WEB" id="WEB" type="text" size="60" value="" /></td>
            </tr>
</form>

<?
}
?>
El problema es que cuando ejecuto la llamada a JQUERY:
Código:
function jqueryAjax__Call(urlDestino,ElementosForm,divEstadoProceso,Frm)
{
$.ajax({
        async       : true,
        type        : "POST",
        dataType    : "json",
        contentType : "application/x-www-form-urlencoded",
        url         : urlDestino,
        data        : "sParams="+ElementosForm,
        beforeSend  : function(objeto){
                            $('#'+divEstadoProceso).html("<img src='./img/loading.gif' title='Loading...' />");
                            },                    
        success: function(msg){
                        $('#'+divEstadoProceso).css('display','none');
                        if(parseInt(msg.status)==0)
                        {
                            $('#'+divEstadoProceso).css('display','none');
                            $('#divContenido').html(msg.contenido);
                            jAlert(msg.texto,'Aviso');
                        }

                    },
                                            
        timeout     : 20000,
        error       : function (xhr, desc, exceptionobj){    
                            $('#'+divEstadoProceso).css('display','none');                        
                            alert("El proceso ha fallado!");
                            alert("XHR : "+xhr.responseText);
                            alert("DESCRIPCION : "+desc);
                            alert("EXCEPCION : "+exceptionobj);
                        }                    
    });
}

Pero cuando en el die escribo:

Código PHP:
die('{"status":"0","txt":"Los campos marcados con * son obligatorios.","contenido":"<div id="divContenido'">Muestro el contenido</div>"}); 
Es decir en la variable "contenido" cuando no tengo saltos de linea como los <br /> no me da ningun problema. EL problema es cuando muestro el codigo html que esta en la plantilla que mencione antes

El problema radica cuando es un codigo html que tiene intros (<br />) y me parece que javascript no le gusta. He puesto tanto en codigo php como js las instrucciones para que me uniere el codigo html y nada.

Habia puesto en la funcion func_mostrar en el die lo siguiente y me sale el problema

Código PHP:
die('{"status":"0","txt":"Los campos marcados con * son obligatorios.","contenido":"'.str_replace("<br />","",nl2br(addslashes(func_mostrar()))).'"}'); 
Derrepente me estoy equivocando en algo, a ver si me pueden ayudar con este problema gracias.

Saludos

Última edición por JuanKa; 02/03/2010 a las 03:36
  #14 (permalink)  
Antiguo 02/03/2010, 07:14
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Problema funcion $.ajax() en jquery 1.4

Aca tenes un problema de comillas. Chequealo.

Cita:
die('{"status":"0","txt":"Los campos marcados con * son obligatorios.","contenido":"<div id="divContenido'">Muestro el contenido</div>"});
Con el form, lo mismo. Fijate que usas comillas dobles para encapsular el json, y también para tu html. Entonces, entran en conflicto. Usa comillas simples en la encapsulación, que eso debe funcionar.

Cita:
function func_mostrar()
{
?>
<form id="frmDatosGenerales" name="frmDatosGenerales" method="post" accept-charset="utf-8" action="./index.php">
<table class="tabla_info_hotel">
<tr>
<td width="25%"><img src="./img/campo_obligatorio.jpg" />Nombre </td>
<td width="75%"><input name="NOMBRE" id="NOMBRE" type="text" size="60" value="" /> </td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P&aa cute;gina web&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ;http://</td>
<td><input name="WEB" id="WEB" type="text" size="60" value="" /></td>
</tr>
</form>

<?
}
?>
  #15 (permalink)  
Antiguo 02/03/2010, 08:42
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 20 años, 2 meses
Puntos: 1
Respuesta: Problema funcion $.ajax() en jquery 1.4

ok. lo probaré y os contaré

gracias
  #16 (permalink)  
Antiguo 03/03/2010, 09:00
Avatar de juaniquillo
Colaborador
 
Fecha de Ingreso: noviembre-2005
Ubicación: San Juan, Puerto Rico
Mensajes: 5.745
Antigüedad: 19 años
Puntos: 281
Respuesta: Problema funcion $.ajax() en jquery 1.4

jQuery 1.4 en adelante el parser de json no acepta json que no sea 'válido'. Esa es una de las cosas que más puede afectar código antiguo:

http://yehudakatz.com/2010/01/15/jqu...alformed-json/
__________________
Por fin.. tengo algo parecido a un blog
Y por lo visto ya estoy escribiendo...

Etiquetas: ajax, funcion
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 06:23.