Javascript ajax加载json文件直到崩溃

Javascript ajax加载json文件直到崩溃,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一小段javascript,它用ajax加载json文件,然后决定从那里做什么。该函数从一个间隔调用,因为它需要每x秒运行一次,在本例中,每30秒运行一次 jQuery(document).ready(function () { loadBuildInterval = setInterval(loadBuildData, intervalTime); //Start interval when document is loaded }); function loadBuildDat

我有一小段javascript,它用ajax加载json文件,然后决定从那里做什么。该函数从一个间隔调用,因为它需要每x秒运行一次,在本例中,每30秒运行一次

jQuery(document).ready(function () {
    loadBuildInterval = setInterval(loadBuildData, intervalTime); //Start interval when document is loaded
});

function loadBuildData() {
    jQuery.ajax({
        url: fileUrl + '?v' + (Math.round(new Date()/1000)), //Add unique version to json file every time it is requested (cache busting).
        type: 'POST',
        data: data,
        dataType: 'json',
        success: function (result) {
            if (result !== null) { //If the json file is not empty, continue
                if (userActiveBuild === 'loading') { //Set initial active build. This will be the build the user loaded into
                    userActiveBuild = result['currentBuild'];
                }
                dataLoaded(result); //Start comparing build
                setTimeout(function () {
                    if (result['inScript'] !== '0') { //If a script must be loaded, run function for it
                        inScript(result);
                    }
                    if (result['inStyle'] !== '0') { //If a style must be loaded, run function for it
                        inStyle(result);
                    }else{
                        jQuery("link[href*='"+scriptURL+"css/inStyle.css']").remove();
                    }
                }, inScriptPause);
                if (intervalTime !== result['userTestInterval']) { //Update interval to the one set in the wp settings
                    intervalTime = result['userTestInterval'];
                    clearInterval(loadBuildInterval); //Reload interval with new duration
                    loadBuildInterval = setInterval(loadBuildData, intervalTime);
                }
            }else{
                //No json data.
            }
        },
        error: function () {
            clearInterval(loadBuildInterval);
            console.log('Reload Changes - Aborting - ajax error.');
        }
    });
}
好的,我的问题是ajax请求的“error:function()”问题。 看起来有时候(并非总是有时候)函数会出错,我想可能它无法加载文件,但当这种情况发生时,ajax函数会尽可能快地自我垃圾处理,用户的浏览器会冻结,我的服务器也会100%运行

我需要ajax在遇到错误时退出,我该怎么做


谢谢

我建议使用
setTimeout
代替
setInterval
, 试试这个:

jQuery(document).ready(function () {
    loadBuildData();
});

function loadBuildData() {
    jQuery.ajax({
        url: fileUrl + '?v' + (Math.round(new Date()/1000)), //Add unique version to json file every time it is requested (cache busting).
        type: 'POST',
        data: data,
        dataType: 'json',
        success: function (result) {
            if (result !== null) { //If the json file is not empty, continue
                if (userActiveBuild === 'loading') { //Set initial active build. This will be the build the user loaded into
                    userActiveBuild = result['currentBuild'];
                }
                dataLoaded(result); //Start comparing build
                setTimeout(function () {
                    if (result['inScript'] !== '0') { //If a script must be loaded, run function for it
                        inScript(result);
                    }
                    if (result['inStyle'] !== '0') { //If a style must be loaded, run function for it
                        inStyle(result);
                    }else{
                        jQuery("link[href*='"+scriptURL+"css/inStyle.css']").remove();
                    }
                }, inScriptPause);

                if (intervalTime !== result['userTestInterval']) { //Update interval to the one set in the wp settings
                    // Change interval
                    intervalTime = result['userTestInterval'];
                }
            }else{
                //No json data.
            }
            // Recall the function after intervalTime
            setTimeout(loadBuildData, intervalTime); 
        },
        error: function () {
            console.log('Reload Changes - Aborting - ajax error.');
        }
    });
}

您可以使用
setTimeout
来代替
setInterval
哦,我明白了,所以只有在成功的情况下才会更新该功能?谢谢你的修复!