jq的ajax在请求404时无法触发error

今天在使用jq的ajax遇到一个问题,当请求的地址失效了,返回是404时,error回调没有执行。请求类型是jsonp,代码如下:

$.ajax({
    url: 'http://xxx',//接口
    type:'get',
    dataType: "jsonp",
    success: function (data) {
            alert(data);
    },
    error: function () {
        alert('网络信号不好,请刷新再试');
    }
});

难道无法捕获404状态?

其实还是可以的,jq的ajax还有一个timeout参数,当加上timeout参数时,在设定的时间内没有拿到结果就会执行error回调,虽然这样还是不能知道是否是404状态:

$.ajax({
    url: 'http://xxx',//接口
    type:'get',
    dataType: "jsonp",
    timeout: 5000,
    success: function (data) {
            alert(data);
    },
    error: function () {
        alert('网络信号不好,请刷新再试');
    }
});

这样可以解决请求404时无反应的问题。

但使用timeout需要注意这个时间设置的大小,因为可能请求是正常的,只是在网络较差的情况下会出现请求耗时长点,如果设置不合理,会导致很多用户在网络较差情况下请求不成功。

本文由 w3cmark_前端笔记 版权所有,转载时请注明出处。
注明出处格式:w3cmark (http://www.w3cmark.com/2016/jq-ajax-404.html)

分享到:

关注w3cmark
微信公众号 w3cmark_com