PHPJavaScript笔记-后端利用Refresh头带错误信息给前端(野路子操作)
生活随笔
收集整理的這篇文章主要介紹了
PHPJavaScript笔记-后端利用Refresh头带错误信息给前端(野路子操作)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在搞最原始的PHP,發現前后端分離的項目,的確比用模板引擎的項目好。至少在用戶體驗上好太多(不看占用內存方面)。估計以后還是要用vue開發前端,做前后端分離。
這里后端的源碼是這樣的邏輯,提交表單后走的是這一串代碼:
$useName = trim($_POST["userName"]); $password = trim($_POST["password"]); $captcha = trim($_POST["captcha"]);if(empty($useName) || empty($password)){$this->error("用戶名或密碼不能為空", "", "", "login"); } if(empty($captcha)){$this->error("驗證碼不能為空", "", "", "login"); } if(Captcha::checkCaptcha($captcha)){$this->error("驗證碼錯誤", "", "", "login"); }然后對應的error函數是這樣的:
protected function error($msg, $platform, $controller, $action, $time = 3){if(!$platform){$platform = P;}if(!$controller){$controller = C;}if(!$action){$action = A;}echo $msg;$refresh = "Refresh:" . $time . ";url=" . URL . "index.php?p=" . $platform . "&c=" . $controller . "&a=" . $action;header($refresh);exit; }如下不輸入任何點擊登錄后:
?會先進入這個頁面:
然后又回到登錄頁面了,這太拉跨了。
用Fiddler抓下看看:
第一個包:
?
可以從Refresh中看到為3,代表3秒后進入后面那個url,然后body里面的字符串被打印到瀏覽器上。整個架構設計就是用的php加smarty模板引擎,沒有使用前后端分離。
修改邏輯:
這里把refresh改成0,然后url那里加個msg=用戶名或密碼不能為空。前端用個js,把這個msg獲取到,然后放到開頭提示用戶,只能這樣了。搞個野路子了。
php修改如下:
protected function error($msg, $platform, $controller, $action, $time = 0){if(!$platform){$platform = P;}if(!$controller){$controller = C;}if(!$action){$action = A;}$encodingMsg = urlencode($msg);$refresh = "Refresh:" . $time . ";url=" . URL . "index.php?p=" . $platform . "&c=" . $controller . "&a=" . $action . "&msg=" . $encodingMsg;header($refresh);exit; }前端
增加js代碼:
window.onload = function (){let msg = decodeURI(getQueryVariable("msg"));if(msg != "false"){let mainDiv = document.getElementById("mainDiv");mainDiv.insertAdjacentHTML("afterbegin", "<div id='alter' class='alert border rounded-3' role='alert'>" + msg + "</div>");} }其中mainDiv是body后面的第一個div
還是這個頁面:
點擊登錄后:
?這樣的話,用戶體驗會稍微高一點點。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的PHPJavaScript笔记-后端利用Refresh头带错误信息给前端(野路子操作)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python不等于_Python小课堂|
- 下一篇: linux vps 可视化监控,Cent