Heim >PHP-Framework >Denken Sie an PHP >Analyse der Fehlerursachen und Lösungen für thinkPHP5-Einreichungsformulare

Analyse der Fehlerursachen und Lösungen für thinkPHP5-Einreichungsformulare

PHPz
PHPzOriginal
2023-04-11 16:10:531104Durchsuche

ThinkPHP5 ist ein Open-Source-Webanwendungsframework, das auf PHP basiert. Sein Designkonzept ist einfach, intuitiv und flexibel. Bei der Entwicklung mit dem ThinkPHP5-Framework können jedoch einige Probleme und Fehler auftreten. Dabei sind Fehler beim Absenden von Formularen eines der häufigsten Probleme. In diesem Artikel werden die Gründe und Lösungen für Fehler im ThinkPHP5-Einreichungsformular vorgestellt.

1. Grund für den Fehler

In ThinkPHP5 können Sie die Post-Methode verwenden, um Formulardaten zu übermitteln, oder Sie können andere Methoden wie „Put“ und „Delete“ verwenden. Beim Absenden von Formulardaten erscheint jedoch manchmal die Fehlermeldung: „Diese HTTP-Methode darf nicht übermittelt werden“, wie in der folgenden Abbildung dargestellt.

Der Grund für diese Fehlermeldung ist, dass der Browser einen Vorabprüfmechanismus namens „OPTIONS“ verwendet. Beim Senden von Daten mit nicht einfachen Anfragemethoden wie POST und PUT sendet der Browser zunächst eine OPTIONS-Anfrage, um festzustellen, ob der Server diese Anfragemethode unterstützt. Wenn der Server dies nicht unterstützt, erscheint die obige Fehlermeldung.

2. Lösung

  1. Cross-Domain-Unterstützung aktivieren

Verstehen Sie zunächst, was Cross-Domain ist. Unter domänenübergreifend versteht man die Ausführung von JavaScript-Code eines Domänennamens auf einer Webseite eines anderen Domänennamens. Genau genommen werden Protokoll, Domänenname und Port als unterschiedliche Domänen betrachtet, solange sie unterschiedlich sind, und es treten domänenübergreifende Probleme auf. Bei der Übermittlung von Formulardaten kann der oben genannte Fehler aufgrund domänenübergreifender Probleme auftreten.

Die Lösung besteht darin, domänenübergreifende Unterstützung auf der Serverseite zu ermöglichen. In ThinkPHP5 können Sie den folgenden Code zur Konfigurationsdatei config.php hinzufügen:

// 开启跨域支持
'cross_domain'   => [
    'allow_origin' => ['*'],
    'allow_methods' => ['POST','GET','OPTIONS','PUT','DELETE'],
    'allow_headers' => ['*'],
    'expose_headers'=> ['token'],
    'max_age'       => 3600,
    'allow_credentials' => true,
],

Darunter gibt der Parameter „allow_origin“ die zulässigen Domänennamen an und bedeutet, dass alle Domänennamen zulässig sind . Der Parameter „allow_methods“ gibt die zulässigen Anforderungsmethoden an, z. B. PUT und DELETE. Der Parameter „allow_headers“ gibt die zulässigen Informationen zum Anforderungsheader an. bedeutet, dass jeder Anforderungsheader akzeptiert wird. Der Parameter „exposure_headers“ gibt die zusätzlichen Informationen an, die Benutzer abrufen dürfen, und „token“ gibt an, dass Token-Informationen abgerufen werden dürfen. Der Parameter max_age gibt die für das Caching zulässige Zeit in Sekunden an. Der Parameter „allow_credentials“ gibt an, dass Identitätsanmeldeinformationen wie Cookies verwendet werden dürfen.

  1. Anfragemethode ändern

Wenn Sie die domänenübergreifende Unterstützung nicht aktivieren möchten, können Sie das Problem auch durch Ändern der Anfrage lösen Verfahren. Beim Senden von Formulardaten können Sie die Anforderungsmethode auf POST ändern, um Probleme bei der Vorabprüfung des Browsers zu vermeiden.

In HTML können Sie das Methodenattribut des Formulars wie folgt ändern:

<form method="POST">

In JavaScript können Sie das Typattribut der Ajax-Anfrage wie folgt ändern: #🎜 🎜#

$.ajax({
    type: 'POST',
    url: 'http://example.com/path/to/api',
    data: postData,
    success: function(data) {
        console.log(data);
    }
});
#🎜 🎜#Nginx-Konfiguration ändern
  1. Wenn der obige Fehler bei der Verwendung von Nginx als Webserver auftritt, können Sie die folgende Konfiguration zur nginx.conf hinzufügen Datei:
location / {
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'POST,GET,OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,token';
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain charset=UTF-8';
        add_header 'Content-Length' 0;
        return 204;
    }
    ...
}
# 🎜🎜# Darunter die Bedeutungen von Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers, Access-Control-Max-Age und anderen Die Parameter sind die gleichen wie oben erläutert.

Zusammenfassung

Fehler beim Senden von Formulardaten sind ein häufiges Problem, das für Anfänger möglicherweise schwer zu lösen ist. Dieser Artikel stellt die Gründe und Lösungen für Fehler beim Senden von Formularen vor und hofft, den Lesern dabei zu helfen, das ThinkPHP5-Framework besser zu nutzen.

Das obige ist der detaillierte Inhalt vonAnalyse der Fehlerursachen und Lösungen für thinkPHP5-Einreichungsformulare. 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