objeto - recorrer json javascript
Encabezado de tipo de contenido HTTP y JSON (3)
Ok, siempre he tratado de evitar el uso de la mayoría de las propiedades del protocolo HTTP o, por mucho que me llame, por miedo a lo desconocido. Sin embargo, me dije a mí mismo que voy a enfrentar el miedo hoy y comenzar a usar encabezados a propósito. Lo que he estado tratando de lograr aquí es enviar datos json
al navegador y usarlos de inmediato. Por ejemplo, si tengo una función de controlador ajax en el estado listo 4 que se parece a
function ajaxHandler(response){
alert(response.text);
}
y he configurado el encabezado content-type en mi php
header(''Content-Type: application/json'');
echo json_encode(array(''text'' => ''omrele''));
Mi pregunta es: ¿por qué no puedo acceder directamente a la propiedad desde la función del controlador, cuando se le dice claramente al navegador que los datos entrantes son application/json
?
El encabezado Content-Type
simplemente se usa como información para su aplicación. Al navegador no le importa de qué se trata. El navegador simplemente 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 debería manejarlos. Necesitas mirar el encabezado, y si es application/json
entonces analizarlo como JSON.
Así es como funciona jQuery. Si no le dice qué hacer con el resultado, usa Content-Type
para detectar qué hacer con él.
El siguiente código me ayuda a devolver un objeto json para js en FronEnd
Mi plantilla code template_file.json
{
"name": "{{name}}"
}
código respaldado por python
def download_json(request):
print("Downloading json")
#response render a template as json object
return HttpResponse(render_to_response("template_file.json",dict(name="Alex Vera")),content_type="application/json")
url.py
url(r''^download_as_json/$'',views.download_json,name=''download_json-url'')
Código de Jquery para FrontEnd
$.ajax({
url:''{% url ''download_json-url'' %}''
}).done(function(data){
console.log(''json '',data);
console.log(''Name'',data.name);
alert(''hello ''+data.name);
});
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, image (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 alerta
alert(response.text);//will alert "[object Object]" string
console.log(response.text);//will logging all data object
si desea alertar a JSON original como cadena, entonces agregue comillas simples (''):
echo "''" . json_encode(array(''text'' => ''omrele'')) . "''";
//alert(response.text) will alert {"text":"omrele"}
No use comillas dobles, confundirá javascript, porque JSON usa comillas dobles para cada valor y clave:
echo ''<script>var returndata='';
echo ''"'' . json_encode(array(''text'' => ''omrele'')) . ''"'';
echo '';</script>'';
//it will return wrong javascript code:
<script>var returndata="{"text":"omrele"}";</script>