Heim > Backend-Entwicklung > PHP-Tutorial > Lösen Sie das Problem der Verarbeitung von Ajax-Anfragen durch PHP und domänenübergreifende Ajax-Probleme

Lösen Sie das Problem der Verarbeitung von Ajax-Anfragen durch PHP und domänenübergreifende Ajax-Probleme

coldplay.xixi
Freigeben: 2023-04-09 12:44:02
nach vorne
2492 Leute haben es durchsucht

Lösen Sie das Problem der Verarbeitung von Ajax-Anfragen durch PHP und domänenübergreifende Ajax-Probleme

PHP bestimmt, ob es sich um eine Ajax-Anfrage handelt. Wir wissen, dass Sie beim Senden einer Ajax-Anfrage benutzerdefinierte Header-Informationen über das XMLHttpRequest-Objekt im JQuery-Framework erstellen können Webinhalte über die Methoden $.ajax, $.get oder $.post übergeben, wird ein HTTP_X_REQUESTED_WITH-Parameter an den Server übergeben. In PHP wird auf Header-Ebene beurteilt, ob es sich um eine Ajax-Anfrage handelt, und die entsprechende Beurteilung erfolgt basierend auf . Unter normalen Umständen ist $_SERVERstandardmäßig

. Es kann auch mit

angepasst und erstellt werden. $_SERVER['HTTP_X_REQUESTED_WITH']['HTTP_X_REQUESTED_WITH']XMLHttpRequest,$_SERVER['HTTP_X_REQUESTED_WITH']Verwandte Lernempfehlungen: XMLHttpRequest.setRequestHeader(name,value)php-Programmierung

(Video)

Beispiel: Die Front-End-Seite sendet eine gewöhnliche 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 initiiert eine domänenübergreifende JSONP-Anfrage

Wir können domänenübergreifende Ajax-Anfragen über die JSONP-Methode von jQuery implementieren , serverseitiges PHP Es muss auch eine entsprechende Verarbeitung durchgeführt werden, was bedeutet, dass PHP Daten in einem bestimmten Format mit der Front-End-Seite anfordern und zurückgeben muss. 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: „jsonp“ und jsonp: „callback“ enthalten, was angibt, dass ich JSONP anfordern möchte, und Es erfolgt ein Rückruf. Natürlich können wir die Rückruffunktion auch anpassen, z. B. jsonpCallback: „success_jsonpCallback“

Sie kann auch einfach geschrieben werden als:

jQuery.getJSON('http://demo.jb51.net/phpajax/jsonp.php?callback=?",{
 random: Math.random()
}, function(data){
 console.log(data);
});
Nach dem Login kopieren

Der PHP-Back-End-Servicecode kann so geschrieben werden (achten Sie auf das Format von die 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-Domain 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“. Aber wir haben auch eine Lösung. Wir können den Header-Informationen der Seite auf b.com eine Codezeile hinzufügen:

header("Access-Control-Allow-Origin: *");
Nach dem Login kopieren
Wenn der von uns festgelegte Header die oben genannten Informationen enthält, können wir jede Anfrage auf dem Server verarbeiten und beantworten Seite, dann können Sie die Header-Informationseinstellungen im Debugging-Tool sehen. Eine der Informationen im roten Feld ist „*Access-Control-Allow-Origin: *“, was bedeutet, dass wir CORS aktiviert haben Um Anfragen nur auf einen bestimmten Domänennamen zu beschränken, kann das so aussehen:

header("Access-Control-Allow-Origin: https://www.jb51.net");
Nach dem Login kopieren

Beispiel: Domänenübergreifende Anforderungsdaten ü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 ajax.php unter einem anderen Website-Domänennamen den folgenden Code hinzu:

header("Access-Control-Allow-Origin: https://www.jb51.net");
$data = array(
  'rand' => $_GET['random'],
  'msg' => 'Success'
);
echo json_encode($data);
Nach dem Login kopieren

Dies realisiert die Initiierung von der Seite www.jb51.net. Stellen Sie eine domänenübergreifende asynchrone Anfrage an den Domänennamenpfad demo.jb51.net/phpajax/ajax.php und erhalten Sie eine Antwort.

Empfehlungen für entsprechende Videos:

PHP-Programmierung vom Einstieg bis zum Master

Das obige ist der detaillierte Inhalt vonLösen Sie das Problem der Verarbeitung von Ajax-Anfragen durch PHP und domänenübergreifende Ajax-Probleme. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:jb51.net
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
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage