Verificar Existencia de Array Enviado desde PHP a JS en forma de JSON

Iniciado por spysecurityca, 22 Agosto 2014, 05:42 AM

0 Miembros y 1 Visitante están viendo este tema.

spysecurityca

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.

engel lex

por que lo mandas mezclado? :s eso no se hace! D:


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

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)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

eLank0

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!

WHK

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 (php) [Seleccionar]
<?php

$datos 
= array();

if(
$estado1){
$datos[] = array(
'a' => 1,
'b' => 2
);
}

if(
$estado2){
$datos[] = array(
'a' => 1,
'b' => 2
);
}

header('Content-Type: application/json; charset=utf-8');
echo 
json_encode(array(
'estado' => 1,
'mensajes' => array(
'primero' => 'Este es un mensaje',
'segundo' => 'Este es otro mensaje'
),
'datos' => $datos
));


Luego desde jquery utilizas:

Código (javascript) [Seleccionar]
$.ajax({
cache : false,
url : document.location,
dataType : 'json',

/* Acá indicas si la petición debe ser GET o POST, de preferencia prefiero POST
para un mayor control desde el php y para el envío de datos grandes. */
type : 'POST',

/* Estos son los datos de tu petición POST */
data : {
accion : 'obtener',
foo : 'var'
}

success : function (data) {
if(data.estado == 1){
// Procesa data.datos, data.mensajes[n], etc
}else{
// En este punto el json venia corrupto
}
},
error : function (request, status, error) {
/* Una carga abortada no debería desplegar un mensaje de error */
if(error == 'abort')
return;

alert('Hubo un error al obtener los datos, inténtelo nuevamente.');

var contextoAjax = this;

/* Esto es por si quieres reintentar cada ves que ocurre un error */
setTimeout(function(){
$.ajax(contextoAjax);
}, 4000);
/* El timeout es para que haga el reintento cada 4 segundos,
si el usuario no tiene internet va a enviar la petición como 500 veces por segundo
y provocarás que el navegador agote los recursos de memoria y CPU del PC */
}
});


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.


Cita de: engel lex en 22 Agosto 2014, 05:51 AMde todas formas puedes usar un "marcador" en el codigo, tipo

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.

engel lex

Cita de: WHK en 22 Agosto 2014, 17:53 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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.