Heim  >  Artikel  >  Backend-Entwicklung  >  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
coldplay.xixinach vorne
2020-08-05 16:52:232490Durchsuche

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);
  }
});

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 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.');
  }
});

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);
});

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).')';

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: *");
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");

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.');
  }
});

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);

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen