2009-09-04 12 views
6

¿Hay alguna forma de verificar si una solicitud entrante es del tipo AJAX JSON?PHP compruebe si la solicitud entrante es tipo JSON

me trataron

if(($_SERVER['REQUEST_METHOD']=='JSON')) 
{ 
} 

Pero no funcionó.

¿Alguna idea?

+0

http://stackoverflow.com/questions/1322863/what-is-the-best-way-inside-a-controller-to-know-if-the-request-is-a-xmlhttp-on – bobince

+0

Nota , el mimo es application/json. – Dykam

Respuesta

11

Dónde estás aceptando solicitudes de, exactamente, lo que no vas a saber?

Puede tener una función al comienzo del script que intente importar los datos como JSON o simplexml. Si detecta un error, usted sabe que es el otro ...

Pensándolo bien, haga que se pruebe que es JSON, simplexml arrojará un error por muchas razones.

$json_request = (json_decode($request) != NULL) ? true : false; 
2

Puede hacer una comprobación en el parámetro aceptar, si es text/javascript su JSON hablando, si es text/xml adivina qué: P

$ _SERVER [ 'HTTP_ACCEPT']

+0

Está asumiendo que el programa de JavaScript establecerá los encabezados de XMLHttpRequest correctamente, lo que nunca se hace (¿a quién le importa?). En general, el script del lado del servidor está hecho para responder en un solo formato, y no veo ninguna razón por la que debería ser diferente. – Havenard

+0

Es un procedimiento estándar cuando se solicita una página o servicio (al tocar una URL), debe especificar qué tipo de resultado espera en la solicitud. He trabajado en muchos servicios web donde los usuarios esperan información en XML o JSON, por lo que especifican eso en param de solicitud. de otro modo, tienen que proporcionar la extensión de la URL, digamos somesite.com/get_user[.xml | .json]. Muchos liberalizadores como Jersey, etc. en Java, jQuery y algunas bibliotecas de curl personalizadas de php agregan esta información en el encabezado de la solicitud (forma de comunicación estándar). de lo contrario, pase un parámetro extra en cada solicitud –

+1

Cuando el navegador intite la comunicación con el servicio de cualquier sitio (o URL), especifican 'text/html', jQuery establece' application/json' en el encabezado request si dataType está configurado a json like ' dataType: 'json'' y la variable anterior es la siguiente 'application/json, text/javascript, */*; q = 0.01' URL abierta del navegador mostrará 'text/html, application/xhtml + xml, application/xml; q = 0.9, image/webp, */*; q = 0.8' –

0

json_decode Try ()

3

Puede consultar el encabezado X-Requested-With, algunas bibliotecas, como jQuery configúrelo en "XMLHttpRequest".

$isAjaxRequest = $_SERVER['X_REQUESTED_WITH'] == 'XMLHttpRequest'; 
+0

En su enlace, jQuery usa ' X-Solicitado-Con 'no' X_REQUESTED_WITH '. Entonces, ¿no haríamos '$ is_ajax = ($ _SERVER ['X-Requested-With'] == 'XMLHttpRequest');' en su lugar? – Justin

6

Debería establecer un encabezado desde el lado del cliente. jQuery y otras bibliotecas establecen una cabecera x-requested-with:

if(strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 
{ 
    echo "Ajax request"; 
} 
0

siempre puede establecer un encabezado adicional especificando eso, o usar una variable arbitraria para indicar las solicitudes JSON.

Cuestiones relacionadas