2017-10-14 72 views
0

我運行在Promise.all使用jQuery一些AJAX請求:訪問jQuery的Ajax錯誤

const firstFetchPromise = $.ajax({ url: '/some/url' }); 
const secondFetchPromise = $.ajax({ url: '/another/url' }); 

Promise.all([ firstFetchPromise, secondFetchPromise ]) 
    .then(results => storeResults(results)) 
    .catch(e => { 
    console.log(e); // e is a promise, how to get the ajax error? 
    }); 

爲了測試錯誤處理我關機了Ajax請求得到他們的數據服務器來自並且瀏覽器使用URL記錄ERR_CONNECTION_REFUSE。

catch語句記錄的東西,看起來像一個承諾:

abort:ƒ (a), 
always:ƒ(), 
complete:ƒ(), 
done:ƒ(), 
error:ƒ(), 
fail:ƒ(), 
getAllResponseHeaders:ƒ(), 
getResponseHeader:ƒ (a), 
overrideMimeType:ƒ (a), 
pipe:ƒ(), 
progress:ƒ(), 
promise:ƒ (a), 
readyState:0, 
responseText:"", 
setRequestHeader:ƒ (a,b), 
state:ƒ(), 
status:0, 
statusCode:ƒ (a), 
statusText:"error", 
success:ƒ(), 
then:ƒ(), 

我如何獲得的Ajax錯誤那是在承諾這樣我就可以顯示在網頁中可讀的錯誤訊息?

+1

'e是一個promise' - 它不應該是 - 那控制檯登錄你已經證明不看任何類似承諾(getResponseHeader,getAllResponseHeaders ,setRequestHeader,overrideMimeType都看起來像XHR方法) –

+0

這很可能是這種情況,我是承諾的新手,更習慣於回調。我用完整的對象更新了問題。我期待會有一些網絡相關的錯誤消息。作爲承諾的關鍵的對象,然後,失敗等,所以我認爲這是一個承諾。 – user3381520

回答

0

Promise.all()拒絕與拒絕的第一個承諾的原因。

在這種情況下,即$.ajaxjqXHR

你可以得到這樣的錯誤:

Promise.all([ firstFetchPromise, secondFetchPromise ]) 
    .then(results => storeResults(results)) 
    .catch(e => { 
    console.log(e.responseText); // Server response 

    e.fail(function (jqXHR, textStatus, errorThrown) { 
     console.log(e === jqXHR); // true 
     console.log(textStatus); // 'error' 
     console.log(errorThrown); // 'HTTP/2.0 404' 
    }); 
}); 
+0

謝謝,這是有道理的。有沒有辦法獲得有關錯誤的信息?我原以爲瀏覽器不僅僅是「錯誤」。 – user3381520

+0

您可以在'e.responseText'中獲得服務器響應。 – aaron