Javascript:ajax错误后继续执行

时间:2017-10-28 21:27:38

标签: javascript jquery ajax

我正在努力完成以下任务:

  • 在加载页面时,代码应该执行$ .getJSON请求(其中 基本上是一个ajax获取请求)(成功时yayy只是继续执行,否则请按此列表)。
  • 当代码400失败时,我想等待1秒钟并重试此请求(如果成功则比yayy继续执行代码,否则请按此列表执行)
  • 之后只需跳过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调用时发生错误后,有什么方法可以继续运行吗?

2 个答案:

答案 0 :(得分: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和async / await以及只是vanilla 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)

答案 1 :(得分:0)

请参阅http://api.jquery.com/jQuery.getJSON/

.error处理程序已被删除。您可以使用.fail代替其处理程序接收jqXhr参数。从那里,您可以阅读status来检查400等。