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.
<?php
if($estado1){
'a' => 1,
'b' => 2
);
}
if($estado2){
'a' => 1,
'b' => 2
);
}
header('Content-Type: application/json; charset=utf-8'); 'estado' => 1,
'primero' => 'Este es un mensaje',
'segundo' => 'Este es otro mensaje'
),
'datos' => $datos
));
Luego desde jquery utilizas:
$.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.
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...
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.