Maison >cadre php >PensezPHP >Analyse des raisons et solutions du rapport d'erreurs du formulaire de soumission thinkPHP5

Analyse des raisons et solutions du rapport d'erreurs du formulaire de soumission thinkPHP5

PHPz
PHPzoriginal
2023-04-11 16:10:531104parcourir

ThinkPHP5 est un framework d'application web open source basé sur PHP. Son concept de conception est simple, intuitif et flexible. Cependant, vous pouvez rencontrer des problèmes et des erreurs lors du développement à l'aide du framework ThinkPHP5. Parmi eux, les erreurs lors de la soumission des formulaires sont l’un des problèmes courants. Cet article présentera les raisons et les solutions aux erreurs dans le formulaire de soumission ThinkPHP5.

1. Cause de l'erreur

Dans ThinkPHP5, vous pouvez utiliser la méthode post pour soumettre les données du formulaire, ou vous pouvez utiliser d'autres méthodes telles que put et delete. Cependant, lors de la soumission des données du formulaire, un message d'erreur apparaît parfois : « Cette méthode HTTP n'est pas autorisée à être soumise », comme le montre la figure ci-dessous.

La raison de ce message d'erreur est que le navigateur utilise un mécanisme de pré-vérification appelé "OPTIONS". Lors de la soumission de données à l'aide de méthodes de requête non simples telles que POST et PUT, le navigateur enverra d'abord une requête OPTIONS pour déterminer si le serveur prend en charge cette méthode de requête. Si le serveur ne le prend pas en charge, le message d'erreur ci-dessus apparaîtra.

2. Solution

  1. Activer la prise en charge inter-domaines

Tout d'abord, comprenons ce qu'est le multi-domaine. Cross-domain fait référence à l'exécution du code JavaScript d'un nom de domaine sur une page Web d'un autre nom de domaine. À proprement parler, tant que le protocole, le nom de domaine et le port sont différents, ils seront considérés comme des domaines différents et des problèmes inter-domaines surviendront. Lors de la soumission des données du formulaire, l'erreur ci-dessus peut se produire en raison de problèmes inter-domaines.

La solution consiste à activer la prise en charge inter-domaines côté serveur. Dans ThinkPHP5, vous pouvez ajouter le code suivant au fichier de configuration config.php :

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

Parmi eux, le paramètre allow_origin spécifie les noms de domaine autorisés, et signifie que tous les noms de domaine sont autorisés. Le paramètre allow_methods spécifie les méthodes de requête autorisées. Les méthodes de requête non simples telles que PUT et DELETE doivent également être ajoutées. Le paramètre allow_headers spécifie les informations d'en-tête de requête autorisées, signifie accepter n'importe quel en-tête de requête. Le paramètre expose_headers spécifie les informations supplémentaires que les utilisateurs sont autorisés à obtenir, et token indique que les informations de jeton peuvent être obtenues. Le paramètre max_age spécifie la durée autorisée pour la mise en cache, en secondes. Le paramètre allow_credentials indique que les informations d'identification telles que les cookies peuvent être utilisées.

  1. Modifiez la méthode de demande

Si vous ne souhaitez pas activer la prise en charge inter-domaines, vous pouvez également résoudre le problème en modifiant la méthode de demande. Lors de la soumission des données du formulaire, vous pouvez modifier la méthode de requête en POST, afin d'éviter les problèmes de pré-vérification du navigateur.

En HTML, vous pouvez modifier l'attribut méthode du formulaire comme ceci :

<form method="POST">

En JavaScript, vous pouvez modifier l'attribut type de la requête ajax comme ceci :

$.ajax({
    type: 'POST',
    url: 'http://example.com/path/to/api',
    data: postData,
    success: function(data) {
        console.log(data);
    }
});
  1. Modifier la configuration nginx

Si cela se produit lorsque utiliser Nginx comme serveur Web Pour l'erreur ci-dessus, vous pouvez ajouter la configuration suivante dans le fichier nginx.conf :

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

Parmi eux, Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control- Allow-Headers, Access-Control-Max-Age La signification des paramètres égaux est la même que celle expliquée ci-dessus.

Résumé

Les erreurs lors de la soumission des données du formulaire sont un problème courant, qui peut être difficile à résoudre pour les débutants. Cet article présente les raisons et les solutions aux erreurs lors de la soumission de formulaires, dans l'espoir d'aider les lecteurs à mieux utiliser le framework ThinkPHP5.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn