Как остановить отправку HTTP-запроса, когда завершена загрузка необходимых файлов? - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь отправить HTTP-запрос на загрузку файлов JSON для моей программы.Однако он непрерывно загружает последний файл JSON без остановки.У меня есть как минимум 6 JSON-файлов и 1 JS-файл для загрузки, и только последняя загрузка JSON-файла достигает 5000+, и он все еще не останавливается.Как мне остановить отправку HTTP-запроса при загрузке необходимых файлов?

Сначала я подумал, что он рекурсивно вызывает обратный вызов ошибки, поэтому я попытался удалить вызов функции ошибок.Я также попытался создать переменную, которая подсчитывает количество загруженных файлов, чтобы я мог остановить HTTP-запрос, когда достигнут максимальный загруженный файл.

Вот мой код:

    // Build the URL to query
    attrs['url'] = url+(qs ? '?'+qs:'');

    if(attrs['dataType']=="jsonp"){
        var script = document.createElement('script');
        script.src = attrs['url'];
        document.body.appendChild(script);
        return this;
    }

    // code for IE7+/Firefox/Chrome/Opera/Safari or for IE6/IE5
    oReq = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    oReq.addEventListener("load", window[cb] || complete);
    oReq.addEventListener("error", error);
    oReq.addEventListener("progress", progress);
    var responseTypeAware = 'responseType' in oReq;
    if(attrs.beforeSend) oReq = attrs.beforeSend.call((attrs['this'] ? attrs['this'] : this), oReq, attrs);

    function complete(evt) {
        if(oReq.status === 200) {
            attrs.header = oReq.getAllResponseHeaders();
            var rsp = oReq.response || oReq.responseText;
            if(attrs['dataType']=="json") try{rsp = JSON.parse(rsp.replace(/[\n\r]/g,"\\n").replace(/^([^\(]+)\((.*)\)([^\)]*)$/,function(e,a,b,c){ return (a==cb) ? b:''; }).replace(/\\n/g,"\n"))} catch(e){error(e);};

            // Parse out content in the appropriate callback
            if(attrs['dataType']=="script"){
                var fileref=document.createElement('script');
                fileref.setAttribute("type","text/javascript");
                fileref.innerHTML = rsp;
                document.head.appendChild(fileref);
            }
            attrs['statusText'] = 'success';
            if(typeof attrs.success==="function") attrs.success.call((attrs['this'] ? attrs['this'] : this), rsp, attrs);
        }else{
            attrs['statusText'] = 'error';
            error(evt)
        }
        if(typeof attrs.complete==="function") attrs.complete.call((attrs['this'] ? attrs['this'] : this), rsp, attrs);
        //Debugging purposes
        console.log(attrs['url']);
    }

    function error(evt){
        if(typeof attrs.error==="function") attrs.error.call((attrs['this'] ? attrs['this'] : this),evt,attrs);
    }

    function progress(evt){
        if(typeof attrs.progress==="function") attrs.progress.call((attrs['this'] ? attrs['this'] : this),evt,attrs);
    }

    if(responseTypeAware && attrs['dataType']){
        try { oReq.responseType = attrs['dataType']; }
        catch(err){error(evt); }
    }

    try{oReq.open('GET', attrs['url']);}
    catch(err){error(evt);  }

    try{ oReq.send();}
    catch(err){error(evt);  }

    return this;
}
stuQuery.prototype.loadJSON = function(url,fn,attrs){
    if(!attrs) attrs = {};
    attrs.dataType = "json";
    attrs.complete = fn;
    this.ajax(url,attrs);
    return this;
}

Еще одно замечание: он успешно загружает файл JSON, просто не прекращает загрузку.

...