Comunidad de diseño web y desarrollo en internet online

Problema con Firefox y Ajax

Citar            
MensajeEscrito el 24 Jun 2008 03:34 pm
Holas, estoy realizando un proyecto basado en php, ajax y json y smarty.

la plantilla de smarty contiene los botones q hacen la ejecucion. al cliquear el boton "Guardar" este llama a una funcion javascript, el cual hace el ajax request al archivo php q contiene la consulta, esta la realiza y le da la rpta al javascript a travez de json el cual es recibido por el javascript y pinta el resultado en la plantilla.

Hasta ahi sali todo ok. pero en IE O_O.

Cuando intento hacerlo en firefox hay una plantilla q no me abre, es una q contiene combos (llenados por bd) y campos de textoq muestrna informacion guardada tb. He intantado hacer q me la pinte y estuve probando pedazo por pedazo de este formulario y he logrado q me pinte la 2/3 del ubigeo (departamento y provincia) lo curioso es que distrito esta igual de estrcutrado q los otros combos y cuando lo agrego ya no pinta. o si aumento una nueva fila en la tabla del formulario tampoco pinta o sin uso una nueva clase de estilo tampoco X_X. es como si tuviera un limite. en el FireBug me sale q el json llega vacio, y que por lo visto es un error en el ajax, pero en IE funciona re bien . q puede ser TT_TT ?, nose si alguien ya tuvo este problema antes,, y si asi fue como podria buscar en la web, porq busuqe con otros terminos y no encontre nada. Q tiene de malo la plantilla?. no hay tags incompletos y tiene el tag form bien puesto O_O.

Aca parte del codigo:

en el javascript - Esta función es llamada cuando se va a entrar a una plantilla (se esta usando el prototype.js):

function direcciona(plt,cod1,cod2,cod3){

new Ajax.Request('servicio.php',{postBody:'pltd=' + plt + '&cod1=' + cod1 + '&cod2=' + cod2 + '&cod3=' + cod3,method: 'POST',onSuccess: onSuccess,onFailure: onFailure});

}

function onSuccess(req,json){
json = eval("("+req.responseText+")");
if(json.success){
var contenedor = document.getElementById("contenedor");
contenedor.style.display = "none";
contenedor.innerHTML = json.tpl;
}

}

function onFailure(e){
alert("Error: "+e.status+" "+e.statusText);
}

//--------------------------servicio.php


require_once('Clase.php');
require_once('TemplateClass.php');

$tpl = new template();
$miclase2 = new miclase2();
$plantilla = $_POST["plt"];
$cod1 = $_POST["cod1"];
$cod2 = $_POST["cod2"];
$cod3 = $_POST["cod3"];
$result["success"] = true;

switch ($plantilla){
case 'formulario':

$dep = $Ubigeo->llenaDepartamentoTpl();
$tpl->core->assign("depa",$dep);
$info = $miclase2->ObtenerData($cod1,$cod2,$cod3);
$tpl->core->assign("info",$info[0][0]);
$tpl->core->assign("dept_codigo",$info[0][1]);
.
.
.
$tpl->core->assign("info50",$info[0][50]);
//otras validaciones para llenar combos (mas consultas)

}

$result["tpl"]=$tpl->core->fetch($plantilla.".tpl");
$output = json_encode($result);
header("X-JSON: ".$output);
echo $output;

//--------------------------la plantilla (tpl) tienes divs y estilos q cumplen funciòn estetica. además posee componentes como combobox, radiobuttons, buttons. q son llenados por el smarty:



<select name="departamento" id="departamento">
{foreach item=item from=$depa}
{if $dept_codigo eq $item.Codigo}
<option value='{$item.Codigo}' selected=true> {$item.Nombre}</option>
{else}
<option value='{$item.Codigo}'> {$item.Nombre}</option>
{/if}
{/foreach}
</select>


<input name="campo" type="text" class="field" id="campo" value="{$info}" maxlength="20"/>


//--------------------------

Es dificil dar un alcance del todo le codigo no solo por su complejidad si no q por terminos laborales se me esta prohibido U_U. Como habia mensionado si comento todas las cosnultas en servicio, y solo dejo la mitad de la plantilla, si sale. Aun no entiendo bien como es la conducta de firefox. he usado el firebug, pero tampoco me da mucha ayuda.

espero puedan ayudarme. saludos

Por Omega

13 de clabLevel



Genero:Masculino  

msie7
Citar            
MensajeEscrito el 01 Oct 2008 05:20 pm
Hola!! Ojalá todavía entres acá porque tengo el mismisimo problema. Ya se que el error de firefox es porque traigo muchos datos desde el servidor y lo envío al pc-usuario con header ( 'X-JSON:('. $res .')' ); donde $res es el resultado de una consulta sql de mas o menos 200 registros.. si elimino la mitad de los registros no tengo problemas, funciona normalmente.. pero obviamente quiero que se envíen los 200, lograste una solución? . Al igual que a ti, este problema solo es para firefox, en los demas navegadores funciona normalmente, inclusive en internet explorer.

Por kiskan

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Oct 2008 05:23 pm
Otra cosa, googleando encontré esto en el sitio web http://www.pablasso.com/category/programacion:

¿Para que usar el X-JSON de Prototype?
15/05/2008

En un canal de IRC, hoy una persona me hizo recordar un problema que tuvimos hace un par de semanas en la oficina porque los datos en JSON que regresaba una web, mágicamente desaparecían aun cuando antes estaba funcionando.

En ambos casos fue el mismo error, no se tenia contemplado que los datos enviados fueran a crecer demasiado eventualmente, y como X-JSON utiliza los headers de HTTP, tiene un tamaño limitado.

Yo realmente no le veo el punto de su existencia, ¿enviar estados de una página? ¿mensajes cortos? Para eso mejor utilizar headers correctos de HTTP y cualquier tipo de datos por el cuerpo de la página como fue pensado desde el principio, la confusión que puede crear es mayor que el beneficio.

Si lo dejas a mi opinión: No lo uses, evítalo.

-------------------------------------------------------------------------------

Ojalá puedas responder pronto =) plis

Por kiskan

1 de clabLevel



 

firefox

 

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