Im heutigen Internet ist AJAX kein unbekanntes Wort mehr. Wenn man von AJAX spricht, fällt einem vielleicht sofort XML ein, das durch RSS entstanden ist. XML-Parsing ist wahrscheinlich kein Problem mehr, insbesondere mit PHP5 und dem Aufkommen einer großen Anzahl von XML-Parsern, wie beispielsweise dem leichtesten SimpleXML. Bei AJAX ist die XML-Analyse jedoch eher auf die Unterstützung von Front-End-Javascript ausgerichtet. Ich denke, jeder, der XML analysiert hat, wird von Bäumen und Knoten verwirrt sein. Es ist unbestreitbar, dass XML eine sehr gute Methode zur Datenspeicherung ist, aber seine Flexibilität erschwert die Analyse. Natürlich bezieht sich die hier erwähnte Schwierigkeit auf den Protagonisten dieses Artikels – JSON.
Was ist JSON? Ich werde das Konzept nicht wiederholen. Laienhaft ausgedrückt handelt es sich um ein Datenspeicherformat, genau wie eine PHP-serialisierte Zeichenfolge. Es handelt sich um eine Datenbeschreibung. Wenn wir beispielsweise ein Array serialisieren und speichern, kann es problemlos deserialisiert und angewendet werden. Das Gleiche gilt für JSON, mit der Ausnahme, dass es eine interaktive Brücke zwischen clientseitigem Javascript und serverseitigem PHP baut. Wir verwenden PHP, um eine JSON-Zeichenfolge zu generieren, und übergeben diese Zeichenfolge dann an das Front-End-Javascript. Javascirpt kann sie problemlos in JSON konvertieren und dann anwenden. Um es einfach auszudrücken: Es sieht wirklich wie ein Array aus.
Näher zu Hause, wie man JSON verwendet. PHP5.2 verfügt über integrierte Unterstützung für JSON. Wenn es niedriger als diese Version ist, gibt es natürlich viele PHP-Versionsimplementierungen auf dem Markt. Verwenden Sie einfach die gewünschte Version. Jetzt sprechen wir hauptsächlich über die integrierte JSON-Unterstützung von PHP. Sehr einfach, zwei Funktionen: json_encode und json_decode (sehr ähnlich der Serialisierung). Eine zum Kodieren und eine zum Dekodieren. Schauen wir uns zunächst die Verwendung der Kodierung an:
<?php
$arr = array(
'name' => 'Chen Yixin',
'nick' => 'deep space',
'Kontakt' => Array(
'email' => 'shenkong at qq dot com',
'website' => 'http://www.devdao.com',
)
);
$json_string = json_encode($arr);
echo $json_string;
?> Es ist sehr einfach, ein Array per JSON zu erstellen. Es sollte darauf hingewiesen werden, dass bei der Nicht-UTF-8-Codierung chinesische Zeichen nicht codiert werden können und das Ergebnis null ist. Wenn Sie daher gb2312 zum Schreiben von PHP-Code verwenden, müssen Sie iconv oder mb verwenden, um den enthaltenen Inhalt zu konvertieren Chinesisch in UTF-8 ist dann json_encoded, und die obigen Ausgabeergebnisse lauten wie folgt:
{"name":u9648u6bc5u946b, "nick": "u6df1u7a7a", "contact":{"email": "shenkong at qq dot com", "website": "http: //www.devdao.com"}} Ich habe Ihnen bereits gesagt, dass es der Serialisierung sehr ähnlich ist, aber Sie glauben es immer noch nicht. Nach der Codierung muss PHP die entsprechende Funktion json_decode bereitstellen. Nach der Ausführung wird ein Objekt wie folgt abgerufen:
<?php
$arr = array(
'name' => 'Chen Yixin',
'nick' => 'deep space',
'Kontakt' => Array(
'email' => 'shenkong at qq dot com',
'website' => 'http://www.devdao.com',
)
);
$json_string = json_encode($arr);
$obj = json_decode($json_string);
print_r($obj);
?> Ist es möglich, auf die Eigenschaften innerhalb des Objekts zuzugreifen? $obj->name, natürlich können Sie es auch in ein Array umwandeln, um es einfach aufzurufen:
$json_string = json_encode($arr);
$obj = json_decode($json_string);
$arr = (array) $obj;
print_r($arr); Abgesehen von der Cache-Generierung fühlt es sich an, als würde PHP es tun, wenn man mit der Rezeption interagiert So verwenden Sie Javascript, um dieses Zeichen zu verwenden:
<scrīpt type="text/javascrīpt">
var arr = {"name":u9648u6bc5u946b, "nick": "u6df1u7a7a", "contact": {"email": "shenkong at qq dot com", "website": http://www.devdao.com"}};
Alert(arr.name)
</scrīpt> Weisen Sie diese Zeichenfolge oben direkt einer Variablen zu, und sie wird zu einem Javascript-Array (der Fachbegriff sollte nicht als Array bezeichnet werden, aber aufgrund der Gewohnheiten von PHP nenne ich es der Einfachheit halber einfach Array. Verstehen ). Auf diese Weise können Sie arr problemlos durchqueren oder tun, was Sie wollen. Ich habe AJAX noch nicht erwähnt, oder? Ja, denken Sie darüber nach: Wenn der vom Server zurückgegebene Antworttext eine JSON-Zeichenfolge anstelle von XML verwendet, wäre es dann nicht sehr praktisch für das Front-End-Javascript, ihn zu verarbeiten? So wird Hundehautpflaster angewendet.
Tatsächlich gibt es, während ich dies schreibe, abgesehen von den unterschiedlichen Datenspeicherformaten, keinen großen Unterschied zwischen JSON und XML, aber eines werde ich weiter unten erwähnen. Obwohl es wenig mit XML zu tun hat, kann es die breitere Anwendung von JSON veranschaulichen, also domänenübergreifende Datenaufrufe. Aus Sicherheitsgründen unterstützt AJAX keine domänenübergreifenden Aufrufe. Es ist sehr mühsam, Daten unter verschiedenen Domänennamen aufzurufen. Obwohl es Lösungen gibt (Stone erwähnte Proxys in seinem Vortrag, ich verstehe es nicht, aber ich weiß es). gelöst werden). Ich habe zwei Dateien geschrieben, die ausreichen, um domänenübergreifende Aufrufe zu demonstrieren.
Hauptdatei index.html
<scrīpt type="text/javascrīpt">
Funktion getProfile(str) {
var arr = str;
document.getElementById('nick').innerHTML = arr.nick;
}
</scrīpt>
<body><div id="nick"></div></body>
<scrīpt type="text/javascrīpt" src=" http://www.openphp.cn/demo/profile.php"></scrīpt > Die angepasste Datei „profile.php“
<?php
$arr = array(
'name' => 'Chen Yixin',
'nick' => 'deep space',
'Kontakt' => Array(
'email' => 'shenkong at qq dot com',
'website' => 'http://www.devdao.com',
)
);
$json_string = json_encode($arr);
echo "getProfile($json_string)";
?> Wenn index.html Profile.php aufruft, wird offensichtlich eine JSON-Zeichenfolge generiert und als Parameter an getProfile übergeben. Anschließend wird der Spitzname in das Div eingefügt. Auf diese Weise wird eine domänenübergreifende Dateninteraktion abgeschlossen ist das nicht ganz einfach? Worauf warten Sie noch, da JSON so einfach und benutzerfreundlich ist?