Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Analyse von domänenübergreifenden Ajax-Problemen

PHP-Analyse von domänenübergreifenden Ajax-Problemen

小云云
小云云Original
2018-03-09 13:06:481173Durchsuche

Tatsächlich gibt es viele Erklärungen zu JSONP im Internet, aber sie sind alle gleich und vage. Für viele Neulinge ist es etwas schwierig, es zu verstehen Versuchen Sie, dieses Problem auf meine eigene Weise zu erklären. Dieser Artikel teilt Ihnen hauptsächlich die PHP-Analyse von domänenübergreifenden Ajax-Problemen mit und hofft, allen zu helfen.

1. Ein bekanntes Problem: Die direkte Ajax-Anfrage für normale Dateien hat das Problem des domänenübergreifenden unbefugten Zugriffs, unabhängig davon, ob Sie eine statische Seite, eine dynamische Webseite, einen Webdienst oder WCF verwenden Da es sich um eine domänenübergreifende Anfrage handelt, ist dies nicht der Fall.

2. Wir haben jedoch auch festgestellt, dass es beim Aufrufen von js-Dateien auf einer Webseite keinen Einfluss darauf hat, ob es sich um eine domänenübergreifende Anfrage handelt (nicht). nur dass wir auch festgestellt haben, dass alle Tags mit dem Attribut „src“ über domänenübergreifende Funktionen verfügen, wie z. B. 3f1c4e4b6b16bbbd69b2ee476dc4f83a, d5ba1642137c3f32f4f4493ae923989c); Es kann davon ausgegangen werden, dass, wenn Sie zum jetzigen Zeitpunkt eine reine Webseite (ActiveX-Steuerung, serverseitiger Proxy usw.) verwenden möchten, dies der Zukunft gehört. Es gibt nur eine Möglichkeit, domänenübergreifend auf Daten zuzugreifen (ausgenommen HTML5-Websocket usw.). Methoden) und das ist der Versuch, die Daten in eine js-Formatdatei auf dem Remote-Server zu laden, damit sie vom Client aufgerufen und weiterverarbeitet werden können.

4. Wir wissen zufällig bereits, dass es ein reines Zeichendatenformat namens gibt JSON, das komplexe Daten prägnant beschreiben kann, ist, dass JSON auch nativ von js unterstützt wird, sodass der Client Daten in diesem Format fast wie gewünscht verarbeiten kann Der Webclient ruft die auf dem domänenübergreifenden Server dynamisch generierte Datei im JS-Format (normalerweise mit JSON als Suffix) auf, genau wie der Aufruf des Skripts. Es ist offensichtlich, dass der Server eine JSON-Datei dynamisch generiert Der Zweck besteht darin, die vom Client benötigten Daten hineinzuladen.

6. Nachdem der Client die JSON-Datei erfolgreich aufgerufen hat, muss er sie entsprechend seinen eigenen Anforderungen verarbeiten und anzeigen AJAX, aber nicht dasselbe.

7. Um dem Client die Nutzung von Daten zu erleichtern, wurde nach und nach ein informelles Übertragungsprotokoll entwickelt. Einer der wichtigsten Punkte dieses Protokolls besteht darin, Benutzern die Übergabe eines Rückrufparameters zu ermöglichen Server und dann der Dienst Wenn der Client Daten zurückgibt, verwendet er diesen Rückrufparameter als Funktionsnamen zum Umschließen der JSON-Daten, sodass der Client seine eigene Funktion anpassen kann, um die zurückgegebenen Daten automatisch zu verarbeiten.

Der ursprüngliche Ajax des Front-End-Codes ist

und sollte in

 $.ajax({
             type: "get",
             async: false,
             url: "url",
             dataType: "json",             success: function(json){
                 alert('success');
             },
             error: function(){
                 alert('fail');
             }
         });

 $.ajax({
             type: "get",
             async: false,
             url: "url",
             dataType: "jsonp",
             jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)             jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据             success: function(json){                alert('success');             },
             error: function(){
                 alert('fail');
             }
         });
Vergleiche geändert werden Unterschied zwischen JSON- und JSONP-Formaten


JSON-Format:


{    "message":"获取成功",    "state":"1",    "result":{"name":"工作组1","id":1,"description":"11"}
}
JSONP-Format:



callback({    "message":"获取成功",    "state":"1",    "result":{"name":"工作组1","id":1,"description":"11"}
})
Sie können den Unterschied sehen, der an den Hintergrund übergebene Parameter ist Shenma mehr Ebene als JSON Callback (). Sie wissen also, wie Sie damit umgehen müssen. Ändern Sie also den Hintergrundcode.


Daher muss der ursprüngliche echo json_encode($xxx) in PHP geändert werden in

Verwandte Empfehlungen:

$callback = $_GET['callback'];echo $callback.'('.json_encode($xxx).')';

Ajax-domänenübergreifende Lösung Die umfassendste Lösung

Beispielfreigabe für eine domänenübergreifende perfekte Ajax-Lösung

JS implementiert domänenübergreifende Ajax-Request-Flask-Antwortinhalte

Das obige ist der detaillierte Inhalt vonPHP-Analyse von domänenübergreifenden Ajax-Problemen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn