分析thinkPHP5提交form報錯原因和解決方法

thinkphp5 是一款基于php的開源web應用框架,它的設計理念是簡單、直觀且靈活的。然而,在使用thinkphp5框架開發時可能會遇到一些問題和錯誤。其中,提交form出現錯誤就是常見的問題之一。本文將介紹thinkphp5提交form出現錯誤的原因和解決方法。

一、錯誤原因

在ThinkPHP5中,提交表單數據可以使用post方法,也可以使用put、delete等其他方法。然而,提交form數據時,有時候會出現錯誤提示:“不允許此http方法提交”,如下圖所示。

這個錯誤提示的原因是由于瀏覽器使用了一種稱為“OPTIONS”的預檢查機制。當使用POST、PUT等非簡單請求方式提交數據時,瀏覽器會首先發送一次OPTIONS請求,以確定服務器是否支持這種請求方式。如果服務器不支持,則會出現上述錯誤提示。

二、解決方法

立即學習PHP免費學習筆記(深入)”;

  1. 開啟跨域支持

先了解一下什么是跨域。跨域是指在一個域名的網頁上執行另一個域名的JavaScript代碼。嚴格地說,只要協議、域名、端口有任何一個不同,都被當作是不同的域,就會出現跨域問題。而提交form數據時,就有可能因為跨域問題而出現上述錯誤。

解決方案是在服務器端開啟跨域支持。在ThinkPHP5中,可以在配置文件config.php中添加如下代碼:

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

其中,allow_origin參數指定允許的域名,表示允許所有域名。allow_methods參數指定允許的請求方式,PUT、DELETE等非簡單請求方式也需要添加進去。allow_headers參數指定允許的請求頭信息,表示接受任意請求頭。expose_headers參數指定允許用戶獲取的額外信息,token表示允許獲取token信息。max_age參數指定允許緩存的時間,單位為秒。allow_credentials參數表示允許使用Cookie等身份憑證。

  1. 更改請求方式

如果不想開啟跨域支持,也可以通過更改請求方式來解決問題。在提交form數據時,可以將請求方式改為POST,這樣就可以避免出現瀏覽器預檢查的問題。

html中,可以這樣修改form表單的method屬性:

<form method="POST">

在JavaScript中,可以這樣修改ajax請求的type屬性:

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

如果在使用Nginx作為Web服務器時出現上述錯誤,可以在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;     }     ... }

其中,Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers、Access-Control-Max-Age等參數的含義和上文中解釋的相同。

總結

提交form數據時出現錯誤是一種常見的問題,對于初學者來說,可能會比較難以解決。本文介紹了提交form出現錯誤的原因和解決方法,希望能夠幫助讀者更好地使用ThinkPHP5框架。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享