formulario ajax manejando una matriz

estoy tratando de manejar una matriz que proviene de un archivo php después de enviar los datos del formulario, el valor de los datos después de enviar el formulario es = ARRAY pero no puedo usar esta matriz de ninguna manera, ¡alguna idea de cómo puedo manejar esta matriz!

Javascript:

   $('#file').live('change',function(){
       $('#preview').html('');
       $('#preview').html('<img src="loader.gif" />');
       $('#data').ajaxForm(function(data){
               $(data['toshow']).insertBefore('.pic_content').hide().fadeIn(1000);

       }).submit();

  });

PHP:

....
....etc
echo json_encode(array('toshow'=>somedata,'data'=>somedata));

La cadena JSON proviene del servidor

{"toshow":"\r\n\t\t\t\t\r\n\t\t<table class=\"out\">\r\n\t\t\t<tr ><td class=\"img\"><a title=\"2012-06-02 01-22-09\" rel=\"prettyPhoto\" href=\"img\/2012-06-02 01-22-09.284.jpg\"><img  src=\"img\/thumb\/2012-06-02 01-22-09.284.jpg\"\/><\/a><\/td><\/tr>\r\n\t\t\t\r\n\t\t\t<td>\r\n\t\t\t\t<table cellSpacing=\"1\" cellPadding=\"0\">\r\n\t\t\t\t\t<tr><td class=\"data\"><span class=\"click\">2012-06-02 01-22-09<\/span><\/td><\/tr>\r\n\t\t\t\t\t<tr><td class=\"data\"><span class=\"click\">Download<\/span><\/td><\/tr>\r\n\t\t\t\t\t<tr><td class=\"data\"><a href=\"img\/2012-06-02 01-22-09.284.jpg\"><span class=\"click\">View<\/span><\/a><\/td><\/tr>\r\n\t\t\t\t<\/table>\r\n\t\t\t<\/td>\r\n\t\t\t<\/tr>\r\n\t\t<\/table>","span":"<span class='text'><img src='greencheck.png'\/>2012-06-02 01-22-09 Uploaded ,File Size =152Kb <\/span>"}

preguntado el 04 de julio de 12 a las 09:07

Entonces, ¿cuál es el problema al que te enfrentas? -

Tu primero .html la llamada es redundante y tiene un error de sintaxis en ajaxForm porque tiene un }); demasiados. -

5 Respuestas

mejor convertir matriz a formato json usando json_encode ($ matriz). Los datos json pueden ser manejados fácilmente por Javascript

Respondido 04 Jul 12, 09:07

+1, y agregar alguna explicación (puede ser con un ejemplo) haría de esta una buena respuesta :) - UltraInstinto

Intenté convertir la matriz a un formato json y enviar la matriz, el problema es que sigo obteniendo datos como un ONT de valor único como, por ejemplo, data[0], data[1] ... echo json_encode(array('toshow'= >$send,'span'=>" ")) .... ¡así que los datos entrantes en el archivo javascript son como una variable! - uno-2017

@dmk002, ¡¡¡los datos entrantes de php vienen como una variable!!! Quiero decir, envío los datos como una matriz json_encode ($ matriz) pero en javascript viene como una variable, así que cuando uso data.toshow = undefined - uno-2017

prueba eval("(" + datos + ')'); antes de procesar datos - Krishna

No puede hacer eco de la matriz directamente, generará Array solamente.

Tienes que usar json_encode.

echo json_encode($your_array);

Respondido 04 Jul 12, 09:07

sí, así es, todavía hay un problema. No sé cómo manejar los próximos datos json en mi función javascript. uno-2017

Puede manejar la matriz a través de PHP también con jQuery

para uso de jQuery - jQuery cada uno

para uso de PHP - foreach o for loop

o tratar de

echo '<pre>';
print_r($array);
echo '</pre>';

Respondido 04 Jul 12, 09:07

En tu lado de PHP tienes que insertar json_encode($array) Y en el lado JS en lugar de usar data['toshow'] utilizan el data.toshow.

¡Espero eso ayude!

Respondido 04 Jul 12, 09:07

Lo he intentado de esta manera, todavía no puedo usar data.toshow always = undefined, no puedo usar datos variables ya que solo son: uno-2017

¿Puedes hacer eco? json_encode($array) y enviarnos la salida? O, tal vez te olvidaste de hecho echo la función en el lado de PHP. Recuerda que en PHP tienes que escribir echo json_encode($array) - nadav s.

Envíe una respuesta JSON, como esta desde PHP:

<?php
echo json_encode($yourarray);
?>

Luego, para adaptar su función AJAX, haga esto:

  $('#file').live('change',function(){
       $('#preview').html('');
       $('#preview').html('<img src="loader.gif" />');
       $('#data').ajaxForm(function(data){
               var jsonData = jQuery.parseJSON(data);
               //acess it like
               alert(jsonData.toshow); //alert for your testing
               $(jsonData.toshow).insertBefore('.pic_content').hide().fadeIn(1000);

       }).submit();

  });
  • EDITAR * Cambios, actualizar de acuerdo con los documentos del complemento.

Como nunca usé el complemento .ajaxForm jQuery, busqué la documentación, voy a poner el código aquí, lo más claro posible por lo que leí, incluso dejo que el complemento analice la respuesta automáticamente en json

No vi ningún .ajaxForm().submit(), y no es necesario según los documentos.

$('#file').live('change',function(){
    $('#preview').html('');
    $('#preview').html('<img src="loader.gif" />');
        $('#data').ajaxForm({ 
            dataType:  'json',
            success:   function(data){
                alert("json string response from php: "+ data.toshow);
                $(data.toshow).insertBefore('.pic_content').hide().fadeIn(1000);    
            }
        }); 
});

dataType hace que el complemento analice la respuesta solo a json. y el éxito: función (datos) sucede si solo hubo una respuesta de PHP. Impleméntelo con cuidado y proporcione un enlace si aún no lo hizo bien.

Respondido 04 Jul 12, 19:07

Edité antes de tu respuesta compañero, es jsonData.toshow, la variable que usa jQuery para analizar la respuesta en json. - André Catita

Entonces sus datos no son una respuesta json de PHP, debe investigar eso, el análisis en sí es bastante simple y es 100% correcto. - André Catita

Edité mi publicación y agregué el valor de los datos que provienen del archivo php. Echa un vistazo y dame tu consejo, todavía no puedo hacer lo que dijiste jsonData.toshow, jsonData.data ... etc. uno-2017

acabo de actualizar mi código por completo, verifique la parte inferior, verifiqué la documentación del complemento que está utilizando. - André Catita

gracias Andre, el problema es que los datos entrantes de php tienen muchos {/, ... etc} muestra, he intentado enviar solo un texto que funciona perfectamente, pero en caso de envío como ¡El problema comienza y no puedo leer los datos como datos json! - uno-2017

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.