我是一隻前端,最近初學thinkphp,剛遇到一個問題,以爲值得分享一下。歡迎吐槽 ~php
場景是這樣的:
我要用JS調用Controller裏面的某個方法獲取json數據,我便使用thinkphp的U方法,發現一直報錯。html
首先,咱們先弄清楚thinkphp的U方法。
thinkphp函數詳解-U方法前端
代碼是這樣的:ajax
//common.js裏ajax獲取遠程數據 remote: '{:U(\'Equipment/a\')}?q=%QUERY '
報錯是這個:thinkphp
很明顯是{:U()} 這個方式不能被正確解析。爲何呢?
thinkphp官網的截圖是這麼說的:
若是要在模板中調用,就採用 {:U( )}的方式。json
我排查好久,終於明白,原來是由於外部JS不能直接獲取模板綁定的變量值。上面中U方法詳解中有講到,在模板中(即view)採用{:U( )}的方式,可是,前端的編碼規範是把JS/CSS獨立出來,儘可能不要放在HTML代碼裏(HTML代碼在view裏),因而我就放在public裏。而後便出現了上述出現的問題。模板只是display了那個HTML,不包括個人外部文件,外部JS沒有被渲染,thinkphp目前也沒有機制去解決這個引入外部文件渲染問題。函數
能夠用這種方法來解決。
我在view模板裏,用一個隱藏的input,而後value裏面設置我要的參數ui
<input type="hidden" id = "a" value="{:U(\'Equipment/a\')}">
而後在JS裏面獲取改input的value,然在組裝好本身須要跳轉的URL編碼
var aUrl = $('#a').val(); var aUrlP = aUrl + "?q=%QUERY"; remote: aUrlP;
這樣就行了。能夠實現外部JS獲取模板中綁定的變量值。
我以爲方法雖然行得通,可是仍是會出現代碼冗餘,期待有更好版本的TP出現。
實屬原創,若有錯誤,敬請指教!!spa