Js取消異步請求


1.xhr:對於原生XHR對象來說,取消的ajax的關鍵是調用XHR對象的.abort()方法

    var xhr = new XMLHttpRequest();
    xhr.open("GET","https://api.github.com/");
    xhr.send();
    xhr.onreadystatechange=function(){
        if(xhr.readyState==4&&xhr.status==200){
            console.log(xhr.response);
        }else{
            console.log(xhr.status);
        }
    }
    xhr.abort();

2.jQuery:jQuery為我們封裝了ajax請求接口,在jQuery中,取消ajax請求也是通過調用.abort()方法,只不過操作的對象不再是原生XHR對象

   var jq = $.ajax({
        type:"get",
        url:"https://api.github.com/",
        dataType:"json",
        success:function(data){
            console.log(data);
        },
        error:function(err){
            console.log(err);
        }
    })
    jq.abort();

3.axios:經常使用vue等框架的話,就會使用axios發送ajax請求。在axios中取消ajax請求不同於上面兩種形式,在axios中是通過axios.CancelToken.source()方法取消請求

    var CancelToken = axios.CancelToken;
    var source = CancelToken.source();

    axios({
        method:"GET",
        url:"https://api.github.com/",
        cancelToken:source.token
        //cancelToken的值起標識作用,標識由source控制的、將要被取消的ajax操作
    }).then((res) => {
        console.log(res.data);
    }).catch((err) => {
        console.log(err);
    });

    source.cancel('Operation canceled by the user.');

  如果我們有多個通過axios發送的ajax請求,需要精准的取消掉指定的請求應該這么做呢?在上面的代碼中有注釋“cancelToken的值起標識作用,標識由source控制的、將要被取消的ajax操作

var CancelToken = axios.CancelToken;

var source = CancelToken.source();
axios({
    method:"GET",
    url:"https://api.github.com/",
    cancelToken:source.token
}).then((res) => {
    console.log(res.data);
}).catch((err) => {
    console.log(err);
});

var custom = CancelToken.source();
axios({
    method:"GET",
    url:"https://api.github.com/",
    cancelToken:custom.token
}).then((res)=>{
    console.log(res.data);
}).catch((err)=>{
    console.log(err);
});

source.cancel('Operation canceled by the user.');
custom.cancel('精確取消');

 綜上三種方式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM