Foros del Web » Programando para Internet » Javascript »

Resultado JSON en iframe.

Estas en el tema de Resultado JSON en iframe. en el foro de Javascript en Foros del Web. Hola a todos. Tengo este código que hace lo siguiente: 1.envia formulario post/ajax al servidor. 2.el servidor procesa la petición y devuelve un array con ...
  #1 (permalink)  
Antiguo 01/05/2012, 14:10
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Resultado JSON en iframe.

Hola a todos.
Tengo este código que hace lo siguiente:
1.envia formulario post/ajax al servidor.
2.el servidor procesa la petición y devuelve un array con 3 variable en formato JSON
1.save_result. si es numerico, todo bien.
2.message. un mensaje, con etiquetas html
3.saved_form. el formulario, una vez gravado (<form id='dddddd'..> bl bla bla </form>"
3.carga el mensaje de error/exito y el formulario gravado si todo ok.

...y lo hace todo bién. 0 problemas.

Dicho formulario recoje valores de parametrización de la web: es parte de un pseudo-csm que estoy montando, con lo que, para más lio, los campos contienen como dato, html y javascript. Esto, convierte la variable JSON en algo inmenso e ilegible, pero funciona. Pongo ejemplo.

Código PHP:
"{\"save_result\":\"1\",\"message\":\"<img whidth=\\\"25\\\" height=\\\"25\\\" src='http:\\/\\/10.1.1.71\\/wturing\\/cssbackend\\/img\\/ok.ico'>\\n<p>save ok<\\/p>\",\"saved_form\":\"<form class=\\\"form_edit\\\" id=\\\"form_20_1_379850\\\" action=\\\"http:\\/\\/10.1.1.71\\/wturing\\/index.php\\\" method=\\\"POST\\\" name=\\\"form_20_1_379850\\\" onsubmit=\\\"subirArchivo('form_20_1_379850')\\\">\\r\\n   <input type='hidden' name='wt_template' value='form_save'>\\r\\n<input type='hidden' name='wt_packet' value='20'>\\r\\n       <div class='(divclass)'>\\r\\n        <label for=\\\"\\\" id=\\\"\\\">id<\\/label>\\r\\n        \\r\\n        <br>\\r\\n        <input type='text' name='id' id='id' value='1'>\\r\\n    <\\/div>    <div class='(divclass)'>   .............   BLABLABLA   .................">(camptr)</label>rn        (requerit)rn        <br>rn        <input type='text' name='(camp)' id='(camp)' value='(value)'>rn    </div></textarea>rn        </div>        <div class=''>rn            <label for='t_textarea' id=''>t_textarea</label>rn            rn            <br>rn            <textarea name='t_textarea'  rows='4' id='t_textarea'>        <div class=''>rn            <label for='(camp)' id=''>(camptr)</label>rn            (requerit)    </div>    <div class='(divclass)'>rn        <label for="\\\" id=\\\"\\\">mail_pwd<\\/label>\\r\\n        \\r\\n        <br>\\r\\n        <input type='text' name='mail_pwd' id='mail_pwd' value='xypato'>\\r\\n    <\\/div>\\r\\n   <div class=''>\\r\\n      \\r\\n       <input type=\\\"submit\\\" value=\\\"gravar\\\" (filtres) class=\\\"\\\" name=\\\"save\\\">\\r\\n   <\\/div>\\r\\n<\\/form>\\r\\n\"}" 
en el servidor, para formatear el retorno json:

Código PHP:
    include('json.php');
    
$json = new Services_JSON();
    return 
$json->encode($array); 
el script (que funciona, sin archivos):
Código PHP:
<script type="text/javascript">
jQuery(function($){
    $(
'form.form_edit').live('submit',function(){ 
        
idform=$(this).attr('id');
        
ur=$(this).attr('action');
        
params=$(this).serialize();
        $.
post(ur,params, function(resposta) { 
           
resp=eval('('+resposta+')');
           if(!
isNaN(resp['save_result'])){
                $(
'.divform[idform='+idform+']').html(resp['saved_form']);
            }
            $(
'.message[idform='+idform+']').html(resp['message']);
        });
        return 
false
    
})
  })
</script> 
Sin embargo, ahora tengo que enviar el formulario con múltiples archivos y eso, con ajax, no se puede.
Leyendo por la web, la solución que mas me ha convenido, es hacerlo con iframes. Bajé un script y adaptado queda así:
Código PHP:
<script type="text/javascript">
function 
subirArchivo (pidform) {
        var 
ifm document.createElement('iframe');
        
ifm.style.display 'none';
        
ifm.name 'tmpfrm';
        
ifm.onload = function (e) {}
        var 
eform document.getElementById(pidform);
        
eform.target 'tmpfrm';
        var 
ebody document.getElementsByTagName('body')[0];
        
ebody.appendChild(ifm);
        
eform.submit();

        
ifm.onload = function (e) {
            var 
resp ifm.contentWindow.document.body.innerHTML;
            var 
respuesta = (JSON)?JSON.parse(resp): eval('(' resp ')'); <----Y DE AQUÍNO PASA
            alert
(respuesta['save_result']);
            if(!
isNaN(respuesta['save_result'])){
                $(
'.divform[idform='+pidform+']').html(respuesta['saved_form']);
            }
            $(
'.message[idform='+pidform+']').html(respuesta['message']);
        }
    }
</script> 
...y no funciona. No pasa de var respuesta=....

Pero si el valor devuelto json es simple, sí funciona.
Código PHP:
{"save_result\":\"1\",\"message\":\"hola","saved_form\":\"que tal\"} 
Creo que tengo el error al cargar el json desde submit...o al recojer dicho valor con innerHTML.

Alguna sugerencia del error? ...o del planteamiento?

Gracias de antemano.
  #2 (permalink)  
Antiguo 01/05/2012, 16:40
 
Fecha de Ingreso: marzo-2007
Mensajes: 82
Antigüedad: 17 años, 1 mes
Puntos: 21
Respuesta: Resultado JSON en iframe.

Hola, aver si te he entendido, lo que quieres hacer es subir multiples archivos a tu servidor atravez de un formulario ??
__________________
Hazle un favor a tu cerebro y juega Ajedrez online
Chess online
  #3 (permalink)  
Antiguo 01/05/2012, 16:46
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Resultado JSON en iframe.

Si, y simulando ajax con un iframe. Y eso ya lo consigo.

El problema está al recojer el resultado de la petición en JSON.

Saludos.
  #4 (permalink)  
Antiguo 01/05/2012, 16:48
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Resultado JSON en iframe.

Si, y simulando ajax con un iframe. Y eso ya lo consigo.

El problema está al recojer el resultado de la petición en JSON.

Saludos.

Etiquetas: ajax, ficheros, json, formulario, iframe
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 05:17.