踩坑環境:前端:Ajax post請求,json類型數據;后端 C#+MVC,前后端正常通信,但是當后台驗證權限不通過時會RedirectToAction跳轉到登錄頁,結果現象是后台正常執行登錄頁的渲染,渲染完成之后前端ajax進入error,頁面不刷新。
經檢查頁面不跳轉是因為后台渲染頁面后以字符串形式返回,被ajax接收,有因為前端設置json格式所以進入error,看來需要后台返回狀態和url,前端js來進行頁面跳轉,但總感覺這樣不太方便,繼續研究一下能否實現后台跳轉,有方案再來更新內容。
內容更新:由於ajax局部更新的特性,單純后台頁面跳轉無法實現,但是每個ajax都去判斷也不現實,參考網友的方案,通過ajax的ajaxSetup重定義ajax的complete(請求完成時調用),
完整js
新建jquery.extend.js擴展文件,頁面引用jquery的地方同時引用jquery.extend.js
1 //添加ajax全局變量 2 $.ajaxSetup({ 3 //ajax完成時檢查返回數據中是否有頁面跳轉的命令,如果存在則跳轉頁面 4 complete: function (XMLHttpRequest, textStatus) { 5 var result = eval('(' + XMLHttpRequest.responseText + ')'); 6 if(result.State=="error"&&result.Message=="Redirect") 7 { 8 window.location.href = result.Data + window.location.search; 9 } 10 } 11 });
后台代碼
1 return Content(Common.Helper.AjaxResult.Result(Common.Helper.AjaxResultType.error, "Redirect",url).ToString());
因為后台對返回json格式進行過打包,所以當需要頁面跳轉時給Message屬性賦值Redirect,給Data屬性賦值url,然后正常操作ajax即可。