Heim  >  Artikel  >  Backend-Entwicklung  >  Diskussion darüber, wie PHP und JS über JSON Daten untereinander übertragen

Diskussion darüber, wie PHP und JS über JSON Daten untereinander übertragen

高洛峰
高洛峰Original
2016-12-01 15:01:281133Durchsuche

Wenn wir PHP und Javascript kombinieren, um bestimmte Funktionen zu implementieren, wird häufig JSON verwendet. json ist ein Datenformat von js und kann direkt von js analysiert werden. PHP kann JSON-Daten nicht direkt lesen, aber PHP bietet die Funktion json_decode zum Konvertieren von JSON-Daten, sodass PHP-Skripte darauf zugreifen können. Gleichzeitig stellt PHP auch die Funktion json_encode bereit, um Daten in das JSON-Format zu konvertieren. Ist der native JSON in js also genau derselbe wie der durch die Funktion json_encode in PHP konvertierte JSON? Heute wird der Webmaster dieses Thema mit allen besprechen.

Wenn wir Array-Daten über PHP an Javascript übergeben, müssen wir sie normalerweise in das JSON-Format konvertieren und über Javascript abrufen. Nehmen wir das Array als Beispiel und schauen wir uns zunächst den Unterschied zwischen den beiden an.

1. Eindimensionales Array
Betrachten Sie ein PHP-Array
Kopieren Sie den Code. Der Code lautet wie folgt:
$array=array("1","2","3") ;

Nach der Konvertierung mit der Funktion json_encode lautet der entsprechende JSON-String
Code kopieren Der Code lautet wie folgt:
["1", "2", "3"].

Aufmerksame Freunde stellten bald fest, dass die nach der Konvertierung erhaltene JSON-Zeichenfolge in Javascript die Form eines Arrays hat. Kann also mit der Array-Zugriffsmethode von js darauf zugegriffen werden?
Natürlich ist es möglich, aber wenn Sie diese JSON-Zeichenfolge an js übergeben, müssen Sie die URL-Code-Funktion verwenden, um sie zu codieren, z. B.:
Code kopieren Der Code lautet wie folgt:
< ;a href="http: //www.php.cn/">
Wir können den folgenden js-Code zur Überprüfung verwenden:
Code kopieren Der Code lautet wie folgt:
function show(str) {
var jobj=eval_r(decodeURI (str));
alert(jobj[2]);

Wenn Sie es selbst ausprobieren, werden Sie feststellen, dass es möglich ist Greifen Sie auf eindimensionale Arrays in js zu. Die eval-Methode interpretiert die JSON-Zeichenfolge als JSON-Objekt, da es sich bei der Übergabe um eine Zeichenfolge handelt. Wenn sie nicht konvertiert wird, erhalten Sie den Wert des dritten Zeichens in der Zeichenfolge.
Lassen Sie uns einige Änderungen an diesem eindimensionalen Array vornehmen. Wir haben festgestellt, dass für das obige eindimensionale Array kein Index angegeben ist. Daher wird standardmäßig ein numerischer Index verwendet:
Betrachten Sie ein PHP-Array
Code kopieren Der Code lautet wie folgt:
$array=array('a'=>'1','b'=>'2','c'=>' 3');

Nach der Konvertierung mit der Funktion json_encode lautet der entsprechende JSON-String
Code kopieren Der Code lautet wie folgt:
{"a":"1",b":" 2“, „c“: „3“}

.
Der offensichtlichste Unterschied ist, dass das [] an beiden Enden des Strings zu {} wurde. Kann dieser String also wie oben verarbeitet und von js aufgerufen werden? Probieren wir es aus:
Kopieren Sie den Code. Der Code lautet wie folgt:
function show(str){
var jobj=eval_r (decodeURI(str));
alert(jobj.a);

Wenn Sie es versuchen, werden Sie feststellen, dass nach dem Klicken auf den Link kein Popup-Fenster erscheint . Warum? Ist das von PHP generierte JSON-String-Format falsch? Nein, als wir die Funktion eval zur Erklärung verwendeten, ist ein Fehler aufgetreten. Ersetzen Sie den obigen Funktionscode durch:
Code kopieren Der Code lautet wie folgt:
function show(str){
var jobj=eval_r('('+decodeURI(str)+')');
alarm(jobj.a);
}

Versuchen Sie es erneut! Wie wäre es damit? Sie können jetzt vorbeischauen. Dies sagt uns, dass Sie bei Verwendung der eval-Methode zum Verarbeiten einer JSON-Zeichenfolge mit Schlüsselnamen die Klammern an beiden Enden der Zeichenfolge beschleunigen müssen. Warum das so ist, weiß der Webmaster nicht. Er steht nur auf den Schultern von Riesen.
Hier ist zu beachten, dass der von PHP generierte JSON-String
{"a":1",b":2",c":3"} nicht direkt an js übergeben werden kann Wird als JSON-Format interpretiert. Wenn Sie diese Zeichenfolge jedoch in JS verwenden, um JSON-Daten direkt zu erstellen, ist dies in Ordnung. Versuchen Sie es mit dem folgenden Code:
Code kopieren Der Code lautet wie folgt:
var jobj={"a":1,b:2,c:3"}
warning(jobj.b);

2. Zweidimensionales Array
Zweidimensionales Array wird in PHP häufig verwendet, daher ist es sehr wichtig, das JSON-Format nach der Konvertierung des zweidimensionalen Arrays zu verstehen . Mit dem obigen Beispiel als Vorahnung gibt der Webmaster direkt den folgenden Beispielcode an:
Kopieren Sie den Code. Der Code lautet wie folgt:
function show (str){
var jobj=eval_r(decodeURI(str));
alert(jobj[0][0]}

Wenn Sie es ausführen , werden Sie feststellen, dass dies dasselbe ist wie Ein eindimensionales Array ist fast dasselbe. Dies ist ein Beispiel ohne Schlüsselnamen, daher ist es in der Show-Funktion auch möglich, die Klammern an beiden Enden der Zeichenfolge zu entfernen.
Als nächstes nehmen wir einige Änderungen am zweidimensionalen Array vor und fügen der zweiten Dimension Schlüsselnamen hinzu. Bitte sehen Sie sich den Beispielcode an:
Kopieren Sie den Code. Der Code lautet wie folgt:
function show(str){
var jobj=eval_r('('+decodeURI(str)+')');
alert(jobj[0].a
}

Nachdem alle den Code ausgeführt hatten, fanden wir Das hier Die Art und Weise, wie wir auf JSON-Daten zugreifen, ist etwas anders. Oben haben wir
alert(jobj[0][0]);
verwendet und hier haben wir
alert(jobj[0]).a); Auf diese Weise wird auf JSON zugegriffen.
Im obigen Beispiel haben wir der zweiten Dimension des zweidimensionalen Arrays einen Schlüsselnamen hinzugefügt. Als Nächstes fügen wir der ersten Dimension einen Schlüsselnamen hinzu, um zu sehen, welche Zugriffsmethoden sich unterscheiden:
Kopieren Sie den Code Der Code lautet wie folgt:
function show(str){
var jobj=eval_r('('+decodeURI(str) +')');
alert(jobj.k[1]);

Hier verwenden wir die Methode von
jobj.k[1]. Solange das Array den Schlüsselnamen enthält, muss beim Konvertieren des Arrays in das JSON-Format
json object.Key name
verwendet werden, um auf die Elemente unter dem Schlüssel zuzugreifen. Im obigen Beispiel das Array-Element Unter der Taste k befindet sich ein numerischer Index. Verwenden Sie daher k[1], um in JSON darauf zuzugreifen.
Als nächstes fügen wir Schlüsselnamen sowohl zur ersten als auch zur zweiten Dimension des Arrays hinzu:
Kopieren Sie den Code. Der Code lautet wie folgt:
function show(str){
var jobj=eval_r('('+decodeURI(str)+')');
alert(jobj.k.a);
}

Wie oben erwähnt, muss auf ihn in der Form
json object.key name
zugegriffen werden, solange er einen Schlüsselnamen enthält. Wenn mehrere Schlüssel vorhanden sind, verwenden Sie
json object.key name.key name..
, fragen Sie mich nicht warum, so wird auf JSON zugegriffen. Nur der Erfinder von Javascript kann Ihnen erklären, warum er dies festgelegt hat.
Fazit:
1. Beim Konvertieren des Arrays in PHP in einen JSON-String und Übergeben an js. Wenn das Array keinen Schlüsselnamen angibt, können Sie es direkt mit der eval-Methode von js in das JSON-Format für die js-Verarbeitung konvertieren. Wenn das Array einen Schlüsselnamen enthält, müssen Sie dies tun, wenn Sie ihn mit der eval-Methode verarbeiten Verwenden Sie
()
Umgeben Sie die JSON-Zeichenfolge.
2. Wenn das Array einen Schlüsselnamen enthält, verwenden Sie nach der Konvertierung in eine JSON-Zeichenfolge die Methode
json object.key name...
, um in js darauf zuzugreifen einen numerischen Index. Dann verwenden Sie
json object[1]
oder
json object.key name[1]
.
Oben haben wir hauptsächlich die Dinge besprochen, auf die geachtet werden muss, wenn PHP JSON-Strings an JS übergibt. Als nächstes besprechen wir, wie der JSON-String verarbeitet wird, wenn er mit js an PHP übergeben wird.
Wenn Sie schlau sind, müssen Sie bereits wissen, dass Sie die json_decode-Funktion zum Dekodieren verwenden können, solange die JSON-Daten in Anführungszeichen gesetzt und als String an PHP übergeben werden [normalerweise mit Ajax]. Das ist richtig! Das ist es! Aber Sie müssen beim Erstellen von JSON-Strings vorsichtig sein. Wenn Sie nicht oft JSON-Strings erstellen, können Sie auch
echo json_encode(array('k'=>array("a"=>'1') verwenden. , '2','3')))
Sehen Sie sich auf diese Weise das JSON-Format der Zielzeichenfolge an, die Sie erstellen müssen. Auf diese Weise können Sie es in js entsprechend den gewünschten Ergebnissen erstellen!
Okay, heute haben wir besprochen, wie man JSON-Daten für die Kommunikation zwischen PHP und JS verwendet. Sie können versuchen, den Objekttyp von PHP nach der JSON-Codierung an JS zu übergeben.