Ich habe immer versucht, die meisten Eigenschaften des HTTP-Protokolls aus Angst vor dem Unbekannten nicht zu verwenden.
Ich sagte mir jedoch, dass ich heute Angst haben und absichtlich Header verwenden werde. Ich habe versucht, json
Daten an den Browser zu senden und sie sofort zu verwenden. Wenn ich zum Beispiel eine Ajax-Handlerfunktion im Bereitschaftszustand 4 habe, die so aussieht:
function ajaxHandler(response){
alert(response.text);
}
Und ich habe den Inhaltstyp-Header in meinem PHP-Code festgelegt:
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 klar mitgeteilt wird, dass es sich um eingehende Daten handelt application/json
?
javascript
php
json
http
php_nub_qq
quelle
quelle
text
als Javascript-Variable im Handler verwenden und nicht als Antwort? Das wäre eine sehr seltsame Funktionalität. Der json_encode erstellt auch 1 Objekt aus Ihrem PHP-Array. Wenn Sie dies in Javascript einbinden, muss es einer Variablen zugewiesen werden.JSON.parse()
. Sie können eine andere Aktion ausführen oder einen Fehler erzwingen, wenn der falsche Inhaltstyp angezeigt wird.response.text
immer noch eine Zeichenfolge.Antworten:
Der
Content-Type
Header wird nur als Information für Ihre Anwendung verwendet. Dem Browser ist es egal, was es ist. Der Browser gibt Ihnen 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 ist vorhanden, damit Ihre App erkennen kann, welche Daten zurückgegeben wurden und wie sie damit umgehen sollen. Sie müssen sich den Header ansehen und ihn
application/json
dann als JSON analysieren.So funktioniert jQuery. Wenn Sie ihm nicht sagen, was er mit dem Ergebnis tun soll, erkennt er
Content-Type
mit, was damit zu tun ist.quelle
header('Content-Type: application/json');
Download bisContent-Disposition: attachment; filename=myfile.json
dahin nicht verwenden und erzwingen, erhalten Sie einemyfile.json.html
. Wenn Sie diesen JSON-Header verwenden, erhalten Siemyfile.json
..html
an die Datei angehängt , da dies standardmäßig der Fall ist .Content-Type: application/json
ist nur der Inhaltsheader. Der Inhaltsheader ist nur eine Information über den Typ der zurückgegebenen Daten, z. B. :: JSON, Bild (PNG, JPG usw.), HTML.Beachten Sie, dass JSON in JavaScript ein Array oder Objekt ist. Wenn Sie alle Daten anzeigen möchten, verwenden Sie console.log anstelle von alert:
Wenn Sie den ursprünglichen JSON-Inhalt als Zeichenfolge benachrichtigen möchten, fügen Sie einfache Anführungszeichen (') hinzu:
Verwenden Sie keine doppelten Anführungszeichen. JavaScript wird dadurch verwirrt, da JSON für jeden Wert und Schlüssel doppelte Anführungszeichen verwendet:
quelle
echo "'" . json_encode(array('text' => 'it\'s wrong')) . "'";
unterbrochen wird (und in vielen Sprachen häufig vorkommt): Diese fehlerhafte Ausgabe wird erzeugt :'{"text":"it's wrong"}'
. Verwenden Sie stattdessen :json_encode(json_encode(array('text' => 'it\'s good')))
. Das Ergebnis wird korrekt"{\"text\":\"it's wrong\"}"
Der folgende Code hilft mir, ein JSON-Objekt für JavaScript im Frontend zurückzugeben
Mein Vorlagencode
template_file.json
Von Python unterstützter Code
Datei url.py.
jQuery-Code für das Frontend
quelle