Heim > Artikel > Backend-Entwicklung > 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
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!