Dieser Artikel stellt hauptsächlich die relevanten Informationen zur PHP-Verarbeitung von Ajax-Anfragen und zu domänenübergreifenden Ajax-Problemen vor. Er ist sehr gut und hat Referenzwert.
PHP-Beurteilung Ob es sich um eine Ajax-Anfrage handelt
Wir wissen, dass Sie beim Senden einer Ajax-Anfrage benutzerdefinierte Header-Informationen über das XMLHttpRequest-Objekt erstellen können. Im JQuery-Framework wird $ übergeben Wenn die .ajax-, $.get- oder $.post-Methode Webseiteninhalte anfordert, übergibt sie einen HTTP_X_REQUESTED_WITH-Parameter an den Server. In PHP wird auf Header-Ebene beurteilt, ob es sich um eine Ajax-Anfrage handelt, und die entsprechende Beurteilung erfolgt basiert auf $_SERVER['HTTP_X_REQUESTED_WITH']
. Im Allgemeinen ist $_SERVER['HTTP_X_REQUESTED_WITH']
standardmäßig auf XMLHttpRequest,$_SERVER['HTTP_X_REQUESTED_WITH']
eingestellt oder kann mithilfe von XMLHttpRequest.setRequestHeader(name,value)
angepasst werden.
Beispiel: Die Front-End-Seite sendet eine normale Ajax-Anfrage an die Back-End-Test.php.
$.ajax({ type: "GET", url: 'test.php', success: function(data) { console.log(data); } });
Der Server test.php kann feststellen, ob es sich bei der Anfrage um eine asynchrone Ajax-Anfrage handelt, und dann entsprechend den Geschäftsanforderungen reagieren.
Der folgende Code dient zur einfachen Überprüfung, ob der Server test.php eine Ajax-Anfrage ist:
function isAjax() { return @$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ? true : false; } if (isAjax()) { echo 'Ajax Request Success.'; } else { echo 'No.'; }
Ajax hat eine domänenübergreifende JSONP-Anfrage initiiert
Wir können eine domänenübergreifende Ajax-Anfrage über die JSONP-Methode von jQuery implementieren. PHP muss diese auch entsprechend verarbeiten, was bedeutet, dass PHP mit ihnen kommunizieren muss Die Frontend-Seite fordert Daten in einem bestimmten Format an und gibt sie zurück.
Beispiel: Die Front-End-Seite initiiert eine JSONP-Anfrage:
$.ajax({ type: "get", data: "random="+Math.random(), url: "http://demo.jb51.net/phpajax/jsonp.php", dataType: "jsonp", jsonp: "callback", success: function(data) { console.log(data); }, error: function() { console.log('Request Error.'); } });
Wir werden feststellen, dass die Ajax-Anfrageparameter dataType enthalten: „jsonp " und jsonp: „callback“, dies zeigt an, dass ich JSONP anfordern möchte und ein Rückruf zurückgegeben wird. Natürlich können wir auch die Rückruffunktion anpassen, z. B. jsonpCallback: „success_jsonpCallback“
oder einfach schreiben:
jQuery.getJSON('http://demo.jb51.net/phpajax/jsonp.php?callback=?",{ random: Math.random() }, function(data){ console.log(data); });
php backend The Der Servicecode kann wie folgt geschrieben werden (beachten Sie das Format der Ausgaberückgabe):
$data = array( 'rand' => $_GET['random'], 'msg' => 'Success' ); echo $_GET['callback'].'('.json_encode($data).')';
Ajax Cross-Domain Request: CORS
CORS, auch bekannt als Cross-Origin Resource Sharing, der vollständige englische Name ist Cross-Origin Resource Sharing. Angenommen, wir möchten Ajax verwenden, um Daten von der Seite von a.com zur Seite von b.com anzufordern. Aufgrund der Same-Origin-Richtlinie ist diese Art von Anfrage normalerweise nicht zulässig, und der Browser gibt auch ein „ zurück. Fehler „Quelleninkongruenz“. Daher der Begriff „domänenübergreifend“. Wir haben aber auch eine Lösung. Wir können den Seitenkopfinformationen von b.com eine Codezeile hinzufügen:
header("Access-Control-Allow-Origin: *");
Wenn der von uns festgelegte Header der ist Die oben genannten Informationen: Nachdem jede Anfrage eingegangen ist, können wir sie auf der Serverseite verarbeiten und beantworten. Anschließend können Sie die Einstellungen für die Header-Informationen im Debugging-Tool sehen. Eine der Informationen im roten Feld ist „*Access-Control-“. Allow-Origin:*". Zeigt an, dass wir CORS aktiviert haben. Wenn Sie Anfragen nur auf einen bestimmten Domänennamen beschränken möchten, können Sie dies tun:
header("Access-Control-Allow-Origin: http://www.jb51.net");
Beispiel: Anfordern von domänenübergreifenden Daten über CORS
$.ajax({ type: "get", data: "random="+Math.random(), url: "http://demo.jb51.net/phpajax/ajax.php", dataType: "json", success: function(data) { console.log(data); $("#result_3").html(data.msg+':'+data.rand); }, error: function() { $("#result_3").html('Request Error.'); } });
Wir fügen diesen Code zu ajax.php unter einem anderen Website-Domainnamen hinzu:
header("Access-Control-Allow-Origin: http://www.jb51.net"); $data = array( 'rand' => $_GET['random'], 'msg' => 'Success' ); echo json_encode($data);
Dies ermöglicht die Initiierung einer domänenübergreifenden asynchronen Anfrage von der Seite www.jb51.net an den Domänennamenpfad demo.jb51.net/phpajax/ajax.php und eine Antwort erhalten wird.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.
Verwandte Empfehlungen:
So legen Sie ProxyTable-Parameter mit Vue festDomänenübergreifend
Serverseitige Konfiguration zur Implementierung von AJAXDomänenübergreifendAnfrage
Lösen Sie das Problem von Ajaxübergreifend DomainAnforderungsdaten-Cookie-Verlust
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der PHP-Verarbeitung von Ajax-Anfragen und domänenübergreifenden Ajax-Problemen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!