Detaillierte Erläuterung der PHP-Verarbeitung von Ajax-Anfragen und domänenübergreifenden Ajax-Problemen

墨辰丷
Freigeben: 2023-03-27 22:56:01
Original
1386 Leute haben es durchsucht

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);
  }
});
Nach dem Login kopieren

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.';
}
Nach dem Login kopieren

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.');
  }
});
Nach dem Login kopieren

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);
});
Nach dem Login kopieren

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).')';
Nach dem Login kopieren

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: *");
Nach dem Login kopieren

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");
Nach dem Login kopieren

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.');
  }
});
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage