踩坑環境:前端:Ajax post請求,json類型數據;後端 C#+MVC,先後端正常通訊,可是當後臺驗證權限不經過時會RedirectToAction跳轉到登陸頁,結果現象是後臺正常執行登陸頁的渲染,渲染完成以後前端ajax進入error,頁面不刷新。前端
經檢查頁面不跳轉是由於後臺渲染頁面後以字符串形式返回,被ajax接收,有由於前端設置json格式因此進入error,看來須要後臺返回狀態和url,前端js來進行頁面跳轉,但總感受這樣不太方便,繼續研究一下可否實現後臺跳轉,有方案再來更新內容。jquery
內容更新:因爲ajax局部更新的特性,單純後臺頁面跳轉沒法實現,可是每一個ajax都去判斷也不現實,參考網友的方案,經過ajax的ajaxSetup重定義ajax的complete(請求完成時調用),ajax
完整jsjson
新建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 });
後臺代碼post
1 return Content(Common.Helper.AjaxResult.Result(Common.Helper.AjaxResultType.error, "Redirect",url).ToString());
由於後臺對返回json格式進行過打包,因此當須要頁面跳轉時給Message屬性賦值Redirect,給Data屬性賦值url,而後正常操做ajax便可。url