Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der PHP-Verarbeitung von Ajax-Anfragen und domänenübergreifenden Ajax-Problemen

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

墨辰丷
墨辰丷Original
2018-05-25 15:02:371344Durchsuche

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!

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