javascript récupérer - En-tête de type de contenu HTTP et JSON




données français (4)

L'en Content-Type tête Content-Type est simplement utilisé comme information pour votre application. Le navigateur ne se soucie pas de ce que c'est. Le navigateur vous renvoie simplement les données de l'appel AJAX. Si vous voulez l'analyser en JSON, vous devez le faire par vous-même.

L'en-tête est là pour que votre application puisse détecter quelles données ont été renvoyées et comment elles doivent être gérées. Vous devez regarder l'en-tête, et si c'est application/json alors l'analyser en JSON.

C'est en fait comment fonctionne jQuery. Si vous ne lui dites pas quoi faire avec le résultat, il utilise le type de Content-Type pour détecter ce qu'il faut faire avec.

Ok donc j'ai toujours essayé d'éviter d'utiliser la plupart des propriétés du protocole HTTP ou comment vous pouvez s'il vous plaît les appeler pour la peur de l'inconnu. Cependant je me suis dit que je vais faire face à la peur aujourd'hui et commencer à utiliser les en-têtes à dessein. Ce que j'ai essayé d'accomplir ici, c'est d'envoyer des données json au navigateur et de l'utiliser immédiatement. Par exemple, si j'ai une fonction de gestionnaire ajax sur l'état prêt 4 qui ressemble à

function ajaxHandler(response){
    alert(response.text);
}

et j'ai mis l'en-tête de type de contenu dans mon php

header('Content-Type: application/json');
echo json_encode(array('text' => 'omrele'));

Ma question est la suivante: Pourquoi est-ce que je ne peux pas accéder directement à la propriété à partir de la fonction gestionnaire, quand le navigateur est clairement dit que les données entrantes sont application/json ?


Content-Type: application/json est juste en-tête de contenu, l'en-tête de contenu est juste des informations sur le type de données retournées, ex :: JSON, image (png, jpg, etc.), html. Gardez à l'esprit que JSON dans javascript est un tableau ou un objet. Si vous voulez voir toutes les données, utilisez console.log au lieu de l'alerte

alert(response.text);//will alert "[object Object]" string
console.log(response.text);//will logging all data object

Si vous souhaitez alerter JSON d'origine en tant que chaîne, ajoutez des guillemets simples ('):

echo "'" . json_encode(array('text' => 'omrele')) . "'";
//alert(response.text) will alert {"text":"omrele"}

N'utilisez pas de guillemets doubles, cela va confondre javascript car JSON utilise un guillemet double pour chaque valeur et clé:

echo '<script>var returndata=';
echo '"' . json_encode(array('text' => 'omrele')) . '"';
echo ';</script>';

//it will return wrong javascript code: 
<script>var returndata="{"text":"omrele"}";</script>

Le code ci-dessous m'aide à retourner un objet json pour js dans le FronEnd

Mon code de modèle template_file.json

{
    "name": "{{name}}"
}

code supporté par 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')

Code Jquery pour FrontEnd

  $.ajax({
        url:'{% url 'download_json-url' %}'        
    }).done(function(data){
        console.log('json ',data);
        console.log('Name',data.name);
        alert('hello '+data.name);
    });

Voici une solution assez simple pour analyser les dates JSON. Utilisez les fonctions ci-dessous selon vos besoins. Vous avez juste besoin de passer le format JSON Date de récupération en tant que paramètre pour les fonctions ci-dessous:

function JSONDate(dateStr) {
    var m, day;
    jsonDate = dateStr;
    var d = new Date(parseInt(jsonDate.substr(6)));
    m = d.getMonth() + 1;
    if (m < 10)
        m = '0' + m
    if (d.getDate() < 10)
        day = '0' + d.getDate()
    else
        day = d.getDate();
    return (m + '/' + day + '/' + d.getFullYear())
}

function JSONDateWithTime(dateStr) {
    jsonDate = dateStr;
    var d = new Date(parseInt(jsonDate.substr(6)));
    var m, day;
    m = d.getMonth() + 1;
    if (m < 10)
        m = '0' + m
    if (d.getDate() < 10)
        day = '0' + d.getDate()
    else
        day = d.getDate();
    var formattedDate = m + "/" + day + "/" + d.getFullYear();
    var hours = (d.getHours() < 10) ? "0" + d.getHours() : d.getHours();
    var minutes = (d.getMinutes() < 10) ? "0" + d.getMinutes() : d.getMinutes();
    var formattedTime = hours + ":" + minutes + ":" + d.getSeconds();
    formattedDate = formattedDate + " " + formattedTime;
    return formattedDate;
}




javascript php json http