背景
筆者遇到一個(gè)這樣的情況浮声,需要利用ajax去訪問一個(gè)url虚婿,用該url返回的src作為資源地址來(lái)播放一個(gè)video標(biāo)簽。大概可以這樣理解:
function freshVideoStatus() {
$.ajax({
type : "POST",
url : $(".video")[0].src,
dataType : 'json',
success:function(data){
//TODO
}
});
}
但是泳挥,我的src并沒有那么絕對(duì)然痊,他是一個(gè)帶有時(shí)間參數(shù)的加密值,也就是說(shuō)屉符,一段時(shí)間后剧浸,這個(gè)src就會(huì)失效锹引,我現(xiàn)在想要做的就是,在這個(gè)既定時(shí)間之后辛蚊,再去訪問這個(gè)url,從而獲取它的失效狀態(tài)粤蝎,然后進(jìn)行一些其他事件。這就引申到了為什么要獲取狀態(tài)碼袋马,怎么去獲取呢?我搜了一些博客秸应,寫的比較簡(jiǎn)單虑凛,執(zhí)行起來(lái)好像并沒有看到什么效果。软啼。
過程
查閱jquery API給我的結(jié)果是
$.ajax({
statusCode: {
404: function() {
alert( "page not found" );
}
}
});
而事實(shí)上是桑谍,它只能訪問到statusCode這里祸挪,并不能拿到準(zhǔn)確的返回碼,所以不管填402贿条,403,404都是無(wú)濟(jì)于事胧辽,它檢測(cè)不到也不會(huì)執(zhí)行你的方法邑商。
然后找了下國(guó)外友人的問題:
Is there a way to get HTTP status code name using JS and AngularJS?
得到一個(gè)這樣的答案:
$.ajaxSetup({
type: "GET",
dataType: "jsonp",
error: function(xhr, exception){
if( xhr.status === 0)
alert('Error : ' + xhr.status + 'You are not connected.');
else if( xhr.status == "201")
alert('Error : ' + xhr.status + '\nServer error.');
else if( xhr.status == "404")
alert('Error : ' + xhr.status + '\nPage note found');
else if( xhr.status == "500")
alert('Internal Server Error [500].');
else if (exception === 'parsererror')
alert('Error : ' + xhr.status + '\nImpossible to parse result.');
else if (exception === 'timeout')
alert('Error : ' + xhr.status + '\nRequest timeout.');
else
alert('Error .\n' + xhr.responseText);
}
});
事實(shí)上經(jīng)過測(cè)試得到人断,還是不能獲取到準(zhǔn)確的statusCode朝蜘,它進(jìn)入error之后,只能檢測(cè)到exception === 'parsererror'
,這就讓我很無(wú)奈了蝉绷。我只是單純的想檢測(cè)一個(gè)402霸姹А!從網(wǎng)頁(yè)network可以看到402就是無(wú)法用JS獲取到桅狠。欲哭無(wú)淚!
另外一個(gè)哥們寫的咨堤,測(cè)試好像還是不行
$http({
method : 'GET',
url : '/someUrl'
}).then(function successCallback(response) {
var status = response.status;
console.log(status); // gives the status 200/401
var statusText = response.statusText;
console.log(status); // HTTP status text of the response
}, function errorCallback(response) {
});
最后我直接選擇了第一個(gè)方案一喘,讓他捕獲到有返回碼但不判斷嗜暴,所以也不能做接下來(lái)的事件。
以上代碼雖然我測(cè)試沒有用萎战,但很可能和我服務(wù)器環(huán)境有關(guān)舆逃,大家大可嘗試一下,比較別人貼出來(lái)不是玩的虫啥。览祖。