Dieses Mal werde ich Ihnen den Unterschied und die Verwendung von JSON und JSONP ausführlich erläutern. Was sind die Vorsichtsmaßnahmen bei der Verwendung von JSON und JSONP?
Kurz gesagt: JSON gibt eine Datenzeichenfolge zurück, während JSONP einen Skriptcode zurückgibt (einschließlich eines Funktionsaufrufs). . Für die Konvertierung des Datenformats können sich Freunde, die es benötigen, auf
beziehen. Der Unterschied zwischen JSON und JSONP (JSON ist der Zweck, JSONP ist nur das Mittel) wird wie folgt eingeführt:
Kurz gesagt, json gibt eine Datenzeichenfolge zurück (einschließlich eines Funktionsaufrufs);
JSON ist tatsächlich ein Objekt in JavaScript, mit var obj={} Qualitativ genau gleich, aber quantitativ unendlich erweiterbar. Um es einfach auszudrücken: JSON ist in JavaScript tatsächlich ein Objekt (Objekt) und ein Array (Array, eigentlich ein Objekt). Dinge. Datenstruktur.
json ist für Menschen leicht zu lesen und zu schreiben und auch für Maschinen leicht zu analysieren und zu generieren. Es hat eine relativ hohe Netzwerkübertragungsrate. Das Front-End und das Backend von funktionalen Websites müssen häufig ausgetauscht werden Datenmengen werden häufig verarbeitet, und JSON ist auf seine leistungsstarke Ausdruckskraft und sein gutes Erscheinungsbild angewiesen und wurde nach und nach zur idealen Front-End- und Back-End-Datenaustauschsprache. Was Senior XML betrifft, denke ich, dass er wie Microsofts XP in den Ruhestand gehen sollte.
Das Front-End- und Back-End-Datenaustauschformat unter demselben Ursprung (wenn Sie nicht die gleiche Ursprungsstrategie verstehen, gehen Sie bitte zu Baidu) ist entschlossen, JSON zu verwenden. Dann ist die Frage, was Wenn ich die auf den Websites anderer Personen bereitgestellten Daten erhalten möchte? Das heißt, das Problem des domänenübergreifenden Lesens von Daten (gehen Sie nicht zu weit und sagen Sie, dass Sie keine Daten von anderen Websites lesen müssen, glauben Sie mir, Sie werden es früher oder später brauchen). Ist JSON in Ordnung? Die Antwort lautet „No Way“. Weil JSON nur ein gewöhnliches Textformat ist, das es Ihnen ermöglicht, überhaupt keine Sicherheit und Vertraulichkeit zu erlangen zu diesem Thema Die Spezifizierer von Das Endergebnis ist, dass nur Tags wie img, script und iframe, die das src-Attribut angeben können, Daten auf den Websites anderer Personen über Domänen hinweg abrufen können (Bilder, Skripte und Quelldateien sind tatsächlich Daten). Zum Beispiel:
<!--京东商品图片--> <img src="http://img30.360buyimg.com/jgsq-productsoa/jfs/t2407/323/1635505465/47386/f2d89d88/56615e00N7a475ee6.jpg" /> <!--百度CDN--> <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
Es scheint, dass es nicht möglich ist, JSON direkt abzurufen. Gibt es eine andere Möglichkeit, die Daten abzurufen? Warum wird JSONP eher als Entdeckung denn als Erfindung bezeichnet, weil es keine neue Technologie beinhaltet, genau wie die Entdeckung von Ajax?
Das Prinzip von JSONP besteht darin, dass Website A die Daten von Website B abrufen muss. Website B sagte, ich werde Ihnen eine Methode geben: [1. Sie verwenden ruft zunächst die open.js-Datei ab (die Verantwortung liegt bei Website B), die die benötigten Daten enthält. 2. Der Name der Methode, mit der Sie die Daten nach Erhalt der Daten verarbeiten (Sie müssen die Daten verarbeiten), muss foo genannt werden (Verantwortung und Verpflichtung des Datenanforderers). Dies entspricht dem Zustandekommen einer Vereinbarung zwischen Website B und die Person, die die Daten anfordert, muss in Übereinstimmung mit den Regeln handeln. Wenn der Antragsteller die beiden oben genannten Regeln nicht gleichzeitig einhalten kann, können die Daten nicht wie erwartet erhalten werden. Nun... das ist gleichbedeutend mit der Aufstellung einer unausgesprochenen Regel
open.js-Inhalt
foo({"name":"B","age":23}); //为什么不直接写成json数据{"name":"B","age":23}呢,原因很简单,在js文件总得合乎js语法吧 //这也是为什么协议中明确规定处理数据的方法名必须命名为foo,因为B网站是在假定请求者的脚本中已经定义了数据处理方法foo的情况下返回数据; //不然就会报foo is not defined错误
Website Ein Skript muss
function foo(data){ console.log(data); //ToDo.. }
open.php
<?php header('Content-type: application/javascript'); $jsonCallback = htmlspecialchars($_REQUEST ['callback']); //获取请求者自定义的回调函数名 $jsonData ='{"name":"B","age":23}'; //待返回的json数据 echo $jsonCallback . "(" . $jsonData . ")"; //输出jsonp格式的数据,即一行函数调用语句 ?>
foo({"name":"B","age":23}); //所谓的jsonp,就是一句函数调用,数据都被包裹传递到参数中了,千万别穿个马甲就不认识了 网站C就用<script src="http://www.B.com/open.php?callback=blah"></script>来请求数据,返回给C的脚本文件内容是: blah({"name":"B","age":23}); 网站N就用<script src="http://www.B.com/open.php?callback=what"></script>来请求数据,返回给N的脚本文件内容是: what({"name":"B","age":23});
jsonp全名叫做json with padding,很形象,就是把json对象用符合js语法的形式包裹起来以使其它网站可以请求得到,也就是将json数据封装成js文件;
json是理想的数据交换格式,但没办法跨域直接获取,于是就将json包裹(padding)在一个合法的js语句中作为js文件传过去。这就是json和jsonp的区别,json是想要的东西,jsonp是达到这个目的而普遍采用的一种方法,当然最终获得和处理的还是json。所以说json是目的,jsonp只是手段。json总会用到,而jsonp只有在跨域获取数据才会用到。
理解了json和jsonp的区别之后,其实ajax里的跨域获取数据就很好理解和实现了,同源时候并没有什么特别的,直接取就行,跨域时候需要拐个弯来达到目的。
附上jquery中ajax请求json数据实例:
(同源):
$.ajax({ url:"persons.json", success:function(data){ console.log(data); //ToDo.. } });
(跨域):
$.ajax({ url:"http://www.B.com/open.php?callback=?", dataType:"jsonp", success:function(data){ console.log(data); //ToDo.. } });
jquery已把jsonp封装进ajax,很合理,因为毕竟绝大多数的jsonp请求都是ajax,关于jquery的ajax具体用法请自行百度,另外要注意的一点就是不同的网站提供的数据接口的$_REQUEST ['callback']中不一定绝对是callback也可能是cb,cbk等,具体使用时务必阅读服务端提供的有关接口使用的详细文档。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Unterschieds und der Verwendung zwischen JSON und JSONP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!