2017-10-28 162 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)