首頁 >php框架 >ThinkPHP >分析thinkPHP5提交form報錯原因與解決方法

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

PHPz
PHPz原創
2023-04-11 16:10:531104瀏覽

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

一、錯誤原因

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

這個錯誤提示的原因是因為瀏覽器使用了一種稱為「OPTIONS」的預檢查機制。當使用POST、PUT等非簡單請求方式提交資料時,瀏覽器會先傳送一次OPTIONS請求,以確定伺服器是否支援此請求方式。如果伺服器不支持,則會出現上述錯誤提示。

二、解決方法

  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框架。

以上是分析thinkPHP5提交form報錯原因與解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn