2017-10-28 73 views
0

我试图完成以下任务:的Javascript:Ajax错误后继续执行

  • 在页面负载,代码应该做一个$ .getJSON要求(该 基本上是一个Ajax GET请求) (在成功之后,你可以继续执行,否则按照这个列表进行)。
  • 当代码400失败时,我想等待1秒钟,然后重试此请求(如果此成功,则继续执行代码,否则继续执行此列表)
  • 之后,只需跳过ajax get请求并继续执行其他代码。

但目前,由于抛出的错误,我无法继续执行代码。为此,我尝试:

try{ 
    $.getJSON('/services/getData').success(function(data) { 
     configurationObject = data["configuration"];        
    }) 
} catch(err) { 
    console.log("error"); 
} 

$.getJSON('/services/getData').success(function(data) { 
    configurationObject = data["configuration"];        
}) 
.error(function(){ 
    console.log("keep running please") 
} 

但都只是停止完整的javascript代码的执行。使用ajax调用发生错误后,有什么方法可以继续运行吗?

+0

你在控制台收到的错误是什么?你确定这是抛出错误的代码吗? – codtex

回答

0

尝试使用promises来完成异步任务。这是多么我想如果我在那里使用jQuery

function getData() { 
    return $.getJSON('/services/getData').then(function(data){ 
    configurationObject = data["configuration"]; 
    return configurationObject 
    }, function(err) { 
    var dfd = $.Deferred(); 
    if (err.status === 400) { 
     ? setTimeout(function() { 
     dfd.resolve(getData()); 
     }, 1000) 
    } else { 
     dfd.reject(err) 
    } 
    return dfd.promise(); 
    }) 
} 

getData().then(successFn, errorFn) 

已经做到了,但如果我能得到关于使用ES7和异步/等待失去的,只是香草JavaScript的,那么这是我怎么会做它,而不是

const sleep = delay => new Promise(rs => setTimeout(rs, delay)) 

async function getData() { 
    const res = await fetch('/services/getData') 

    if (res.status === 400) { 
    await sleep(1000) 
    return getData() 
    } else if (!res.ok) { 
    throw new Error('Could not get data') 
    } 

    const json = await res.json() 
    configurationObject = json['configuration'] 
    return configurationObject 
} 

getData().then(successFn, errorFn)