Heim  >  Artikel  >  php教程  >  Wenn Ajax domänenübergreifend Daten an das PHP-Programm sendet, wird das PHP-Programm immer zweimal ausgeführt.

Wenn Ajax domänenübergreifend Daten an das PHP-Programm sendet, wird das PHP-Programm immer zweimal ausgeführt.

WBOY
WBOYOriginal
2016-08-08 08:49:47953Durchsuche

Das PHP-Programm wird auf IIS7 bereitgestellt. Beim Senden von Daten mit Ajax sind zwei Probleme aufgetreten. Das eine ist domänenübergreifend und ein PHP-Programm wird immer zweimal ausgeführt.

Die Lösung für das erste Problem stammt von Baidu. Fügen Sie einfach die folgenden Codezeilen hinzu:

header('Access-Control-Allow-Origin:*');

header("Access-Control-Allow-Headers: x-requested-with,content-type");

header('Access-Control-Allow-Methods: OPTIONS,POST,GET');

Tatsächlich können Sie es auch direkt in IIS festlegen, ohne Code hinzuzufügen. Wählen Sie einfach die Site direkt aus, klicken Sie dann rechts auf den HTTP-Antwortheader, konfigurieren Sie ihn direkt darin und fertig. Wie im Bild gezeigt:

Für die zweite Frage gab es kein Ergebnis von Baidu, also musste ich eine Frage stellen und Google verwenden. Ich habe es sofort verstanden, bin dann den Hinweisen gefolgt, um es zu finden, und habe es schließlich herausgefunden.

In der domänenübergreifenden CORS .net-Lösung wird es wie folgt eingeführt (http://jingyan.baidu.com/article/03b2f78c190ad25ea237ae33.html)

Für dieselbe Anforderung sind zwei Methoden mit derselben Anforderungsadresse erforderlich, eine mit der Markierung „POST“ und die andere mit der Markierung „OPTIONS“. Die Methode „OPTIONS“ ist hier nicht erforderlich Jede Logik. Tun Sie es einfach und der Rückgabewert ist ungültig (tatsächlich ist die OPTIONS-Anfrage die Überprüfung des Browsers. Beim Senden einer POST-Anfrage mit Parametern sendet der Browser zuerst eine OPTIONS-Anfrage und überprüft die Header-Informationen der Anfrage und die Antwort Die Header-Informationen müssen konsistent sein, bevor die POST-Anfrage tatsächlich gestartet wird.

Die Paketerfassung ergab, dass dies tatsächlich der Fall war. Der Browser generierte zwei Anfragen, OPTIONS service/service.php HTTP/1.1 und POST /service/service.php HTTP/1.1

Ich wollte ursprünglich direkt void zurückgeben, wenn ich OPTIONEN anfordere, wie im Artikel erwähnt, aber wenn ich die Konfiguration von PHP sehe, kann ich die Aktion direkt einschränken. Ich habe es versucht und es hat funktioniert. Jetzt ist Ajax domänenübergreifend und das PHP-Programm wird nur einmal ausgeführt.

Die Konfigurationsmethode in IIS ist wie folgt: Suchen Sie die PHP-Programmseite, Sie können auch Servereinstellungen auswählen, klicken Sie auf die Handlerzuordnung rechts, suchen Sie PHP, klicken Sie auf Bearbeiten, klicken Sie im Popup-Dialogfeld auf Anforderungslimit , wählen Sie dann „Prädikat“ aus und klicken Sie unten auf „Prädikat“. Geben Sie zunächst „GET“ und „POST“ ein, wenn Sie dazu aufgefordert werden. Um Ärger zu vermeiden, habe ich zuvor die Standardoption (alle Prädikate) verwendet und bin daher auf dieses Problem gestoßen. Wie im Bild gezeigt:

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