ThinkPHP5 是一款基於PHP的開(kāi)源Web應(yīng)用框架,它的設(shè)計(jì)理念是簡(jiǎn)單、直覺(jué)且靈活的。然而,在使用ThinkPHP5框架開(kāi)發(fā)時(shí)可能會(huì)遇到一些問(wèn)題和錯(cuò)誤。其中,提交form出現(xiàn)錯(cuò)誤就是常見(jiàn)的問(wèn)題之一。本文將介紹ThinkPHP5提交form出現(xiàn)錯(cuò)誤的原因與解決方法。
一、錯(cuò)誤原因
在ThinkPHP5中,提交表單資料可以使用post方法,也可以使用put、delete等其他方法。然而,提交form資料時(shí),有時(shí)會(huì)出現(xiàn)錯(cuò)誤提示:“不允許此Http方法提交”,如下圖所示。
這個(gè)錯(cuò)誤提示的原因是因?yàn)闉g覽器使用了一種稱(chēng)為「OPTIONS」的預(yù)檢查機(jī)制。當(dāng)使用POST、PUT等非簡(jiǎn)單請(qǐng)求方式提交資料時(shí),瀏覽器會(huì)先傳送一次OPTIONS請(qǐng)求,以確定伺服器是否支援此請(qǐng)求方式。如果伺服器不支持,則會(huì)出現(xiàn)上述錯(cuò)誤提示。
二、解決方法
- 開(kāi)啟跨域支援
#先了解什麼是跨域??缬蚴侵冈谝粋€(gè)網(wǎng)域的網(wǎng)頁(yè)上執(zhí)行另一個(gè)網(wǎng)域的JavaScript程式碼。嚴(yán)格地說(shuō),只要協(xié)定、網(wǎng)域名稱(chēng)、連接埠有任何一個(gè)不同,都被當(dāng)作是不同的域,就會(huì)出現(xiàn)跨域問(wèn)題。而提交form資料時(shí),就有可能因?yàn)榭缬騿?wèn)題而出現(xiàn)上述錯(cuò)誤。
解決方案是在伺服器端開(kāi)啟跨網(wǎng)域支援。在ThinkPHP5中,可以在設(shè)定檔config.php中加入以下程式碼:
//?開(kāi)啟跨域支持 'cross_domain'???=>?[ ????'allow_origin'?=>?['*'], ????'allow_methods'?=>?['POST','GET','OPTIONS','PUT','DELETE'], ????'allow_headers'?=>?['*'], ????'expose_headers'=>?['token'], ????'max_age'???????=>?3600, ????'allow_credentials'?=>?true, ],
其中,allow_origin參數(shù)指定允許的域名,表示允許所有網(wǎng)域。 allow_methods參數(shù)指定允許的請(qǐng)求方式,PUT、DELETE等非簡(jiǎn)單請(qǐng)求方式也需要加入。 allow_headers參數(shù)指定允許的請(qǐng)求頭訊息,表示接受任意請(qǐng)求頭。 expose_headers參數(shù)指定允許使用者取得的額外信息,token表示允許取得token資訊。 max_age參數(shù)指定允許快取的時(shí)間,單位為秒。 allow_credentials參數(shù)表示允許使用cookie等身分憑證。
- 更改請(qǐng)求方式
如果不想開(kāi)啟跨域支持,也可以透過(guò)更改請(qǐng)求方式來(lái)解決問(wèn)題。在提交form資料時(shí),可以將請(qǐng)求方式改為POST,這樣就可以避免出現(xiàn)瀏覽器預(yù)先檢查的問(wèn)題。
在HTML中,可以這樣修改form表單的method屬性:
<form method="POST">
在JavaScript中,可以這樣修改ajax請(qǐng)求的type屬性:
$.ajax({ ????type:?'POST', ????url:?'http://example.com/path/to/api', ????data:?postData, ????success:?function(data)?{ ????????console.log(data); ????} });
- #修改nginx設(shè)定
如果在使用Nginx作為Web伺服器時(shí)出現(xiàn)上述錯(cuò)誤,可以在nginx.conf檔案中加入以下設(shè)定:
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等參數(shù)的意思和上文解釋的相同。
總結(jié)
提交form資料時(shí)出現(xiàn)錯(cuò)誤是常見(jiàn)的問(wèn)題,對(duì)於初學(xué)者來(lái)說(shuō),可能會(huì)比較難解決。本文介紹了提交form出現(xiàn)錯(cuò)誤的原因和解決方法,希望能幫助讀者更好地使用ThinkPHP5框架。
以上是分析thinkPHP5提交form報(bào)錯(cuò)原因與解決方法的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門(mén)文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)