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?
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.
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>
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);
});