Siempre he tratado de evitar usar la mayoría de las propiedades del protocolo HTTP por miedo a lo desconocido.
Sin embargo, me dije a mí mismo que hoy voy a enfrentar el miedo y comenzar a usar encabezados a propósito. He estado tratando de enviar json
datos al navegador y usarlos de inmediato. Por ejemplo, si tengo una función de controlador Ajax en estado listo 4 que se ve así:
function ajaxHandler(response){
alert(response.text);
}
Y he configurado el encabezado de tipo de contenido en mi código PHP:
header('Content-Type: application/json');
echo json_encode(array('text' => 'omrele'));
¿Por qué no puedo acceder directamente a la propiedad desde la función de controlador, cuando se le dice claramente al navegador que los datos entrantes son application/json
?
javascript
php
json
http
php_nub_qq
fuente
fuente
text
como una variable de JavaScript en el controlador y no responder? Esa sería una funcionalidad muy extraña. Json_encode también crea 1 objeto a partir de su matriz PHP. Entonces, cuando obtienes esto en javascript, debe asignarse a una variable.JSON.parse()
. Podría tomar alguna acción diferente o forzar un error si aparece el tipo de contenido incorrecto.response.text
lo que sigue siendo una cadena.Respuestas:
El
Content-Type
encabezado solo se usa como información para su aplicación. Al navegador no le importa lo que es. El navegador solo le devuelve los datos de la llamada AJAX. Si desea analizarlo como JSON, debe hacerlo por su cuenta.El encabezado está allí para que su aplicación pueda detectar qué datos se devolvieron y cómo debe manejarlos. Debe mirar el encabezado y, si es así,
application/json
analizarlo como JSON.Así es como funciona jQuery. Si no le dice qué hacer con el resultado, lo utiliza
Content-Type
para detectar qué hacer con él.fuente
header('Content-Type: application/json');
y fuerza la descarga paraContent-Disposition: attachment; filename=myfile.json
entonces, terminará con unmyfile.json.html
. Usando este encabezado json, obtendrásmyfile.json
..html
al archivo, porque eso es lo que está predeterminado.Content-Type: application/json
es solo el encabezado del contenido. El encabezado del contenido es solo información sobre el tipo de datos devueltos, por ejemplo, JSON, imagen (png, jpg, etc.), html.Tenga en cuenta que JSON en JavaScript es una matriz u objeto. Si desea ver todos los datos, use console.log en lugar de alertar:
Si desea alertar al contenido JSON original como una cadena, agregue comillas simples ('):
No use comillas dobles. Confundirá JavaScript, porque JSON usa comillas dobles en cada valor y clave:
fuente
echo "'" . json_encode(array('text' => 'it\'s wrong')) . "'";
producirá esta salida roto:'{"text":"it's wrong"}'
. Use este lugar:json_encode(json_encode(array('text' => 'it\'s good')))
. El resultado se"{\"text\":\"it's wrong\"}"
El siguiente código me ayuda a devolver un objeto JSON para JavaScript en el front-end
Mi código de plantilla
template_file.json
Código respaldado por Python
Archivo url.py
Código jQuery para el front end
fuente