Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: spysecurityca en 22 Agosto 2014, 05:42 am



Título: Verificar Existencia de Array Enviado desde PHP a JS en forma de JSON
Publicado por: spysecurityca en 22 Agosto 2014, 05:42 am
Si pues, tengo un Ajax en el JS que me trae los echo desde PHP

Uno de esos echo es un Array convertido a JSON en PHP, los otros son echo de mensajes.

La pregunta es ¿Como hago para aislar del resto de echo el Array que envío desde php a JS ?

Necesito analizar el Array en JS pero la variable datos=eval("(" + conex2.responseText + ")"); me trae todo lo que sea echo (Cosa que quiero) y me interrumpe el analisis del Array que envío desde PHP.


Título: Re: Verificar Existencia de Array Enviado desde PHP a JS en forma de JSON
Publicado por: engel lex en 22 Agosto 2014, 05:51 am
por que lo mandas mezclado? :s eso no se hace! D:


de todas formas puedes usar un "marcador" en el codigo, tipo

Código:
mensaje linea 1 
mansaje linea 2
//*inicioJSON*//
{a:1,b:2}
//*finJSON*//
mensaje linea 3
etc...

traerte el mensaje completo, meterlo en una variable, usas "indexOf" para conseguir la posición de el marcador de inicio y de fin, usas "substr" para sacar la sección de JSON, y luego la evalúas XD (es un montón de procesos necesarios, pero mínimos para lo que quieres)


Título: Re: Verificar Existencia de Array Enviado desde PHP a JS en forma de JSON
Publicado por: eLank0 en 22 Agosto 2014, 11:53 am
Hola!

¿No sería más sencillo y a la vez eficiente enviar todos los datos en formato JSON para ahorrar dolores de cabeza?  :o

Salu2!


Título: Re: Verificar Existencia de Array Enviado desde PHP a JS en forma de JSON
Publicado por: WHK en 22 Agosto 2014, 17:53 pm
Pues lo normal sería que el texto de salida fuera unicamente de tipo json y no mezclar texto plano con json ya que para procesar texto json en javascript deberias utilizar el envio de cabeceras json o si no no te va a funcionar bien en todos los navegadores.

Código
  1. <?php
  2.  
  3. $datos = array();
  4.  
  5. if($estado1){
  6. $datos[] = array(
  7. 'a' => 1,
  8. 'b' => 2
  9. );
  10. }
  11.  
  12. if($estado2){
  13. $datos[] = array(
  14. 'a' => 1,
  15. 'b' => 2
  16. );
  17. }
  18.  
  19. header('Content-Type: application/json; charset=utf-8');
  20. 'estado' => 1,
  21. 'mensajes' => array(
  22. 'primero' => 'Este es un mensaje',
  23. 'segundo' => 'Este es otro mensaje'
  24. ),
  25. 'datos' => $datos
  26. ));

Luego desde jquery utilizas:

Código
  1. $.ajax({
  2. cache : false,
  3. url : document.location,
  4. dataType : 'json',
  5.  
  6. /* Acá indicas si la petición debe ser GET o POST, de preferencia prefiero POST
  7. para un mayor control desde el php y para el envío de datos grandes. */
  8. type : 'POST',
  9.  
  10. /* Estos son los datos de tu petición POST */
  11. data : {
  12. accion : 'obtener',
  13. foo : 'var'
  14. }
  15.  
  16. success : function (data) {
  17. if(data.estado == 1){
  18. // Procesa data.datos, data.mensajes[n], etc
  19. }else{
  20. // En este punto el json venia corrupto
  21. }
  22. },
  23. error : function (request, status, error) {
  24. /* Una carga abortada no debería desplegar un mensaje de error */
  25. if(error == 'abort')
  26. return;
  27.  
  28. alert('Hubo un error al obtener los datos, inténtelo nuevamente.');
  29.  
  30. var contextoAjax = this;
  31.  
  32. /* Esto es por si quieres reintentar cada ves que ocurre un error */
  33. setTimeout(function(){
  34. $.ajax(contextoAjax);
  35. }, 4000);
  36. /* El timeout es para que haga el reintento cada 4 segundos,
  37. si el usuario no tiene internet va a enviar la petición como 500 veces por segundo
  38. y provocarás que el navegador agote los recursos de memoria y CPU del PC */
  39. }
  40. });

jSon existe justamente para que no tengas que trabajar con textos planos y no tengas este tipo de problemas, por eso siempre tu comunicación entre php y javascript debería ser vía jSon (de preferencia).

Fijate que en la petición post le puse type json, es porque un servidor WEB no solo soporta datos serializados via post data sino también datos en json y eso es estandard.


de todas formas puedes usar un "marcador" en el codigo, tipo

Código:
mensaje linea 1 
mansaje linea 2
//*inicioJSON*//
{a:1,b:2}
//*finJSON*//
mensaje linea 3
etc...

Eso jamas se hace xD, por eso existen los protocolos y formatos, están diseñados para llevar todo tipo de contenido sin dar problemas, por ejemplo si hago lo que dices entonces jamás voy a poder poner "//*finJSON*//" dentro de un campo de texto para guardar y ser enviado via json o poner un texto de un blog con eo ya que va a terminar cortando tu código a la mitad y se producirá una inyección de datos. Para eso existen las secuencias de escape en todos los lenguajes de programación entre muchas otras cosas pensadas para su buen uso, como lo hace json, javascript, batch, bash, php, perl, python, etc etc, es como si yo quisiera poner un texto con comillas simples y dobles dentrod e una cadena de caracteres de php, necesito usar la secuencia de escape de backslash, en javascript debo usar carácteres unicode, en json también usa backslash al igual que sql, etc.

Saludos.


Título: Re: Verificar Existencia de Array Enviado desde PHP a JS en forma de JSON
Publicado por: engel lex en 22 Agosto 2014, 18:52 pm
Eso jamas se hace xD, por eso existen los protocolos y formatos, están diseñados para llevar todo tipo de contenido sin dar problemas, por ejemplo si hago lo que dices entonces jamás voy a poder poner "//*finJSON*//" dentro de un campo de texto para guardar y ser enviado via json o poner un texto de un blog con eo ya que va a terminar cortando tu código a la mitad y se producirá una inyección de datos. Para eso existen las secuencias de escape en todos los lenguajes de programación entre muchas otras cosas pensadas para su buen uso, como lo hace json, javascript, batch, bash, php, perl, python, etc etc, es como si yo quisiera poner un texto con comillas simples y dobles dentrod e una cadena de caracteres de php, necesito usar la secuencia de escape de backslash, en javascript debo usar carácteres unicode, en json también usa backslash al igual que sql, etc.

hey! XD quien hace mal es él al no filtrar su información XD yo solo estoy dando una solución pirata a un problema del mismo tipo! XD