it-swarm.com.de

HTTP Content-Type Header und JSON

Ich habe immer versucht, die meisten Eigenschaften des HTTP-Protokolls aus Angst vor dem Unbekannten zu vermeiden.

Ich sagte mir jedoch, dass ich heute Angst haben und Kopfzeilen absichtlich verwenden werde. Ich habe versucht, json Daten an den Browser zu senden und sofort zu verwenden. Wenn ich zum Beispiel eine Ajax-Handler-Funktion in Bereitschaftszustand 4 habe, sieht das so aus:

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

Und ich habe den Content-Type-Header in meinem PHP Code gesetzt:

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

Warum kann ich nicht direkt über die Handlerfunktion auf die Eigenschaft zugreifen, wenn dem Browser eindeutig mitgeteilt wird, dass die eingehenden Daten application/json sind?

123
php_nub_qq

Der Header Content-Type wird nur als Information für Ihre Anwendung verwendet. Dem Browser ist es egal, was es ist. Der Browser gibt nur die Daten aus dem AJAX -Aufruf zurück. Wenn Sie es als JSON analysieren möchten, müssen Sie dies selbst tun.

Der Header befindet sich dort, sodass Ihre App erkennen kann, welche Daten zurückgegeben wurden und wie sie damit umgehen sollen. Sie müssen sich den Header ansehen, und wenn es sich um application/json handelt, dann analysieren Sie ihn als JSON.

Genau so funktioniert jQuery. Wenn Sie nicht angeben, was mit dem Ergebnis geschehen soll, wird mit dem Content-Type ermittelt, was damit geschehen soll.

120
Rocket Hazmat

Content-Type: application/json ist nur der Inhaltsheader. Der Inhaltsheader enthält lediglich Informationen zum Typ der zurückgegebenen Daten, z. B. :: JSON, image (png, jpg usw.), html.

Denken Sie daran, dass JSON in JavaScript ein Array oder Objekt ist. Wenn Sie alle Daten anzeigen möchten, verwenden Sie console.log anstelle von alert:

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

Wenn Sie den ursprünglichen JSON-Inhalt als Zeichenfolge warnen möchten, fügen Sie einfache Anführungszeichen (') hinzu:

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

Verwenden Sie keine doppelten Anführungszeichen. Es wird JavaScript verwirren, da JSON für jeden Wert und jeden Schlüssel doppelte Anführungszeichen verwendet:

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

// It will return the wrong JavaScript code:
<script>var returndata="{"text":"omrele"}";</script>
7
Among Amrul

Der folgende Code hilft mir, ein JSON-Objekt für JavaScript im Front-End zurückzugeben

Mein Vorlagencode

template_file.json

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

Python-unterstützter Code

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")    

File url.py

url(r'^download_as_json/$', views.download_json, name='download_json-url')

jQuery-Code für das Frontend

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