2015-10-16 12 views
9

söz başarısız (400):Gerçekten başarısız bir js getirme isteğinden yanıt gövdesini almanın bir yolu yok mu? isteği başarısız olursa yeni js <a href="https://fetch.spec.whatwg.org/#dom-global-fetch" rel="noreferrer">API</a> getirme

fetch(uri).catch(function(err) { 
    console.log(err); 
}); 

gerçekten bu olduğunda tepki bedeni almaya hiçbir yolu var mı? Örneğin. Bir hata kodunu kontrol etmek için

DÜZENLEME: https://jsfiddle.net/4x4xLwqo/ bu mockbin bitiş noktası çağırır: http://mockbin.org/bin/d87acbb0-526e-4d66-aea4-b827d9c35031/view

EDIT 2: Bir js keman oluşturduk daha iyi bir bitiş noktası kullanacak şekilde güncellenir jsfiddle: https://jsfiddle.net/4x4xLwqo/2/

cevap

9

fetchcatch eğer girmeyeceğim bir HTTP hatasıyla karşılaşır. Bunu normal bir then ile halledebilirsiniz. MDN itibaren

:

bu genellikle izin sorunları veya benzeri anlamına gelir rağmen bir fetch() söz, bir ağ hatası karşılaşıldığında bir TypeError ile reddedecektir - 404 örneğin bir ağ hatasını teşkil etmez. Başarılı bir fetch() için doğru bir denetim, söz vermenin çözümlendiğini kontrol etmeyi, ardından Response.ok özelliğinin true değerine sahip olduğunu kontrol etmeyi içerir.

Ve eşlik eden örnek, hem de MDN: Eğer denemek

fetch('flowers.jpg').then(function(response) { 
    if(response.ok) { 
    response.blob().then(function(myBlob) { 
     var objectURL = URL.createObjectURL(myBlob); 
     myImage.src = objectURL; 
    }); 
    } else { 
    console.log('Network response was not ok.'); 
    } 
}) 
.catch(function(error) { 
    console.log('There has been a problem with your fetch operation: ' + error.message); 
}); 
+0

mi? Ben bir 400 – grahamrhay

+0

gelen catch bloğu sonuna kadar – grahamrhay

+1

@grahamrhay yukarıda jsfiddle görmek güvenli bir ('" https: // jsfiddle "') sayfasından güvensiz içerik ('" http: // mockbin "') istiyorsun . Bunu yapamazsınız. Sunucuya sormadan önce Getirme işlemi hata veriyor. Benzer şekilde, erişim kontrol başlıklarını mockbin yanıtlarında göremiyorum. Erişim yok, yine, bu bir sunucu hatası değil, bu bir bağlantı hatası. İki TLS (veya iki% 100 güvensiz) (alt) etki alanınız varsa ve her biri düzgün bir şekilde erişim denetimi başlıklarına sahip olsaydı (veya yalnızca tek yönlü bir veri aktarımı ve veri sunucusu erişim başlıklarına sahipti), Bu sadece iyi çalışması gerekir. – Norguard

İlgili konular