A. 如何檢測ajax因網路斷開或延時導致的錯誤並重連
$.ajax({
async:true,//true非同步,false同步
url:'',
data:$(this).serialize(),
type:'get',
dataType:'json',//xml,html,script,json,jsonp,text
complete:function(XHR,TS){alert('complete');},//完成回調函數(XHR,TS)
error:function(XMLHttpRequest,textStatus,errorThrown){
//XMLHttpRequest.readyState:
//0-(未初始化)還沒有調用send()方法
//1-(載入)已調用send()方法,正在發送請求
//2-(載入完成)send()方法執行完成,已經接收到全部響應內容
//3-(交互)正在解析響應內容
//4-(完成)響應內容解析完成,可以在客戶端調用了
//XMLHttpRequest.status:
//textStatus:"timeout","error","notmodified"和"parsererror"。
//(0)null
//(1)timeout超時
//(2)error
//(3)notmodified未修改
//(4)parsererror解析錯誤
console.log(XMLHttpRequest);
console.log(textStatus);
console.log(errorThrown);
},//默認值:自動判斷(xml或html)。請求失敗時調用此函數。有以下三個參數:XMLHttpRequest對象、錯誤信息、(可選)捕獲的異常對象。
success:function(response){alert('success');}
});
可以通過error的狀態來判斷請求狀態,來做異常處理。
B. 解決瀏覽器ajax請求本地文件報錯問題
近來在拆衡吵做自己的UI庫的時候,遇到一個問題,瀏覽器發送的ajax請求本地文件,會報跨域錯誤。報錯如下:
XMLHttpRequest cannot load file:///xxx
Cross origin requests are only supported for protocol schemes: http, data, chrome-extension, https, chrome-extension-resource.
解決方案如下:chrome添加啟動參數:--allow-file-access-from-files ,這樣本地ajax請求就不會報跨旅侍域錯誤了。注意每個啟動參數「--」之前要有空格隔開。
做法:
找到谷歌瀏覽器啟動程序exe,發送快捷方式到桌面,在桌面右擊谷歌瀏覽器,選擇屬性,點擊快捷方式選項卡,在目標欄位後添加啟動參數:--allow-file-access-from-files,修攔飢改完成後點擊確定即可。重啟瀏覽器就不會報錯了。
具體操作如下圖:
C. ie瀏覽器ajax請求異常
在ie9以下,你就要用兼容性寫法了。先確保js中不報錯,js報錯了就很容易不往下執行了。再看ajax參數格式是不是寫錯了,再看ajax的一些基本屬性寫沒寫,再找不到就打斷點一個一個地方測,最後在考慮是不是兼容性問題
望採納
D. 前端ajax請求出現400錯誤怎麼解決
ajax 出錯,有兩種可能。 發枝衡送數據的時候報錯 (URL 不對,參數不對 ) 接收數據的時候報錯(這個錯誤在你即使請求成功了,但是沒好搭攔有返友胡回值也會報錯)
E. 使用ajax是出現網頁上有錯誤怎麼解決
"網頁上有錯誤原因:
1.網頁本身的問題,目前許多網站都是用的免費共享型模板,一般這樣的模板都存在不通用,原模板的所有js(javascript)腳本可能又沒有被完全用到。加之設計者的水平或是疏忽等問題。導致在頁面上找不到js對象。就會顯示出網頁有問題的現象。
2.用戶電腦本身問題。如是用的瀏覽器的版本問題,或者所瀏覽頁面需要某些插件和組件,可能曾經設置屏蔽和沒有安裝都可能出現網頁上有錯誤問題。
3.惡意病毒和流氓插件引起。許多網民在不知情的情況下,安裝一些帶有流氓捆綁插件的安裝程序,這樣的情況也容易導致出現網頁上有錯誤。
網頁上有錯誤解決方案
首先,我們來介紹下手動解決網頁上有錯誤解決方法(操作較繁瑣)
1、點擊「開始」菜單,打開「運行」。
2、輸入regsvr32 jscript.dll後選擇「確定」。 出現提示(jscript.dll中的DIIRegisterServer成功)後,點擊「確定」。
3、再次輸入regsvr32 vbscript.dll選擇「確定」。 再一次出現提示(vbscript.dll中的DIIRegisterServer成功)後,點「確定」。 經過以上兩次成功提示,說明已成功修復IE組件。
4、將瀏覽器的過濾等功能關閉後,清除一下瀏覽器的緩存(工具->Internet選項->(在Internet臨時文件框中-刪除Cookies),再點Internet臨時文件框中刪除文件(記得勾上刪除所有離線內容),確定後,然後再重新打開瀏覽器嘗試!
軟體解決網頁上有錯誤
下載金山毒霸2011——病毒查殺——快速掃描,金山毒霸2011在清除電腦內捆綁的惡意插件以及盜號木馬病毒的同時能智能修復電腦中存在的問題。"
按照我的方法操作解決問題,不行再問我。
F. 網頁myjqueryajax request error是什麼意思怎麼解決
首先ajax返回500錯誤一般情況是伺服器端錯誤,一般可以採用ajax調試或者瀏覽器調試的方式查看錯誤。
方式1:ajax調試-
$.ajax({url:"ajax.php",//請求中頃的頁面地址 type:'post', //請求數據的方式 get post dataType:'text', //數據返賣差陸回的方式 text html json success:function(data) { //請求之後,響應慶洞成功執行 alert(data); }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest.status); alert(XMLHttpRequest.readyState); alert(textStatus); }, });
方式2-瀏覽器調試:按下F12查看網路請求返回的錯誤原因。
G. ajax同步非同步異常處理區別
同步:httpRequest.open('POST', url, false);
非同步宏搭:httpRequest.open('POST', url, true);
二者區別:沖絕稿散孝http://www.cppblog.com/converse/archive/2009/05/13/82879.html
H. 打開網站時出現:ajax操作發生異常
你如果用jquery、prototype等框架寫的ajax,檢查你的請求方式有沒有問題 希望對你有所幫助!
I. ajax error怎麼解決
ajax出現錯誤error,一般滾禪可以直接在error返回的錯誤信息裡面找扮纖原因廳備仿。
如果對錯誤信息不明確,也可以藉助開發者工具看看請求地址是否正確,請求參數是否有異常,伺服器是否有響應,返回狀態和數據是否正常等方面找原因。
J. 前端如何盡量正確地處理ajax的異常
如今前端領域是MVVM框架的天下,組件庫也層出不窮,但是,並沒有一個知名的組件庫提供ajax異常的成熟解決方案,所以今天我們就來研討一下,如何盡量正確地處理異常。
從業務上簡單說,凡是code不是200的,都是異常。這里code可以是HTTP狀態碼,也可以是響應體的code,就不細究了,反正本質沒差別。然後,根據code的不同,又可以細分成401 403 404 500等等。
如果你的後端夥伴以HTTP狀態碼表示404,以響應體code表示其他錯誤,而且你又無法勸說他們,那麼你應在axios的攔截器里把各種情況全考慮進去,比如:
超時很簡單,axios也支持,設定超時閾值即可。超時跟無響應的區別是,超時意味著HTTP三次握手成功,但是得不到響應體,瀏覽器知道介面是存在的,但是響應體又在規定時間內沒有拿到。無響應是根本無法HTTP握手,也就無法獲知介面存在。
處理超時,通常做法是在攔截器里重新請求一遍,還是超時的話就視為伺服器錯誤。
得不到響應又分成2種,可能是網斷了,也可能是伺服器停機了。
苛刻地說,你應分辨這2種情況,並給出不同的提示,畢竟網斷了,用戶可以尋找別的聯網方式,而伺服器停機了就給個重連按鈕,讓用戶有事沒事的嘗試重連一下。
關於解決方案,首先說,XHR對象無法區分到底斷網還是伺服器停機,axios對於2種情況都返回'Network Error'。在得到這個反饋之後,你接下來可以有這2種解決辦法:
你可以將 https://api.map..com/images/blank.gif 改成其他伺服器穩定且位元組小的圖片。或許你可以做一張幾位元組的圖片,傳到一個非常牛逼的CDN上。
MDN手冊: https://developer.mozilla.org/zh-CN/docs/Web/API/Navigator/connection
它不支持IE,就算你不在乎這一點,那麼它是不是一定準呢?對於需要登錄的VPN網路,它是否准呢?我也不知道,總體說,它真的不是最佳的方案。我推薦用方案1。
很簡單,分為3種:
通常,一個介面,只需要按照其中一種去處理即可,優先順序就是上面書寫順序。
容器內錯誤提示肯定是內容區的介面出錯才會出現。
處理方式:
局部報錯比較容易理解,比如一個List的介面出錯,那麼,上策是應當給這個容器盡量撐高到有內容時的高度,然後居中給一個錯誤圖標和錯誤描述。中策是不考慮有內容時候的高度,只讓錯誤提示和錯誤描述撐起一定高度即可。都不算錯。如果容器很小,比如就是一個3位數值,那麼用一個 - 表示錯誤也可以。
頁面整體報錯稍微復雜,比如一個左右結構的內容管理系統,前置介面有userInfo介面、全局字典介面、全局路由介面等,這些介面與眾不同的地方在於它們是基礎介面,它們出錯的話,網站乾脆就不能用,頁面骨架也是錯亂的,這種情況下可以有2種解決辦法:一是跳轉到專門的5xx報錯頁面,頁面中央有錯誤圖標、錯誤提示,以及「返回上一頁」的按鈕;二是用白板遮罩覆蓋瀏覽器視口,居中放一個錯誤圖標和錯誤文字以及「刷新頁面」的按鈕,本質是用一個fixed的遮罩壓住瀏覽器全部面積。用哪種方案都可。所以你要做的是決定哪些介面屬於全局報錯,哪些介面屬於局部報錯,並做不同的處理。
報錯內容:
根據ajax異常的分類,可能至少能分出3種:網路錯誤、伺服器宕機、伺服器錯誤。具體用什麼圖標和文字我就不多說了。
組件化:
容器內報錯應盡量組件化。該放返回上一頁或刷新按鈕的,一定要放按鈕。
排他性:
只要做了容器內報錯,就不要做另外報錯了。這也說明了一點,就是在axios攔截器里彈toast或者modal是愚蠢的方案,我在別的文章也提到過這種觀點。不做容器內報錯的情況,才應該考慮其他3種情況。
什麼樣的場景下使用容器隱藏?
比如頁面有一個角落顯示你的粉絲數、關注數、評論量……。如果有獲取到數據,則讓這個容器出現,沒有的話,則容器就保持隱藏。這一類場景往往應用於非主要內容,比如側邊欄的小內容塊。
由於這只適用於非主要內容,那麼主要內容也會有它自己的報錯,所以,你不必擔心用戶看不到「網路出錯」這類錯誤提示。
先簡單對比一下toast和modal。
很簡單,toast就是輕提示,不需要手動關閉,modal就是重提示,需要手動關閉。採用哪個,只要站在用戶角度思考問題就好了。比如有人說,異常應當用重提示。可以這么絕對化么?不可以。比如你在某個頁面點贊,提示你 「您已經點過贊了」 ,這用重提示嗎?肯定toast就夠了。同樣的,成功提示一定用輕提示嗎?比如提示 「感謝參與,工作人員將在3~5個工作日內聯系你」 ,這么長,能toast?能一閃而過?
什麼介面適用彈出提示?簡單說,只要跟UI顯示不相乾的,都最好是使用彈出提示。比如這幾種場景:
先說上傳數據斷網之類的錯誤,通常用modal,因為modal能夠攔截用戶動作,避免重復上傳,而且,還能給用戶足夠的時間讓用戶看清楚出錯原因,避免無謂的重試。
然後說數據內容錯誤,無論是表單提交,還是點個贊,錯誤提示一般用toast,畢竟用戶可能只是不小心填錯的,看一眼然後趕緊改正就好了。
最後說401錯誤,有2種做法,一是用modal,因為一般要強制用戶轉到登錄頁,但是轉之前也得讓用戶看明白為什麼要轉,所以可以先modal提示,點擊確定就跳轉到登錄頁;二是用toast,但是需要先跳轉,然後在登錄頁上提示toast「請先登錄」。
警告條
警告條是可關閉的、永久生命的、又不妨礙用戶繼續操作的彈出組件,一般在頁面頂部,或者在用戶操作區域的附近。什麼場景用警告條?
比如的MD編輯器,你只要輸入,就會自動給伺服器發送數據,頻率很快,有時候因為網路或者伺服器的問題,會出現保存失敗的可能性,這時候就會在頁面頂部出現一個比較長時間的警告條,告訴你保存失敗,但你依然可以繼續寫,什麼時候網路正常了,什麼時候toast才會自動消失,當然你也可以手動關閉它。
總之,toast、modal、警告條究竟什麼場合使用,要根據產品、業務具體而定,要注意優先使用容器內報錯和容器隱藏。