2012-08-27 16 views
19

Yeni, güncelleme veya silme modellerinde sunucu hata yanıtını yönetmenin en iyi yolunu bilmek istiyorum. Şu anda sunucu bir http durum kodu # 400 döndürüyor. Ancak, Backbone'daki varsayılan hata işleyicisi hataları göstermiyor.Backbone ile sunucu hata yanıtını yönetin

Bu hataları nasıl gösterebilirim?

Sunucu tarafı doğrulaması başarısız olduğunda sunucunun http hata başlıklarını döndürmesi tamam mı? (Belki bir durum = 'HATA' iletisi ile bir başarı yanıtı daha iyidir)

cevap

20

2XX'den başka bir http durumu döndürüyorsanız, zaten işin yarısı bitti demektir. :-) Temel olarak, yapabileceğiniz şey cevap olarak geri almak istediğiniz her şeyi geri göndermektir.

// Send back http status 500 
echo 'Could not save, server error'; 

500 statü Omurga hata geri arama tetikleyecek ve yanıtı jqXHR nesnesidir:

Örneğin, sadece böyle bir şey geri gönderebilir. Yukarıdaki örnekte, hata geri bildiriminizde böyle bir şey yaparak iletiyi alabilirsiniz.

model.save({},{ 
    error: function(model, response) { 
     console.log(response.responseText); 
    } 
}); 

Bu, sunucu tarafındaki hatayla ilgili bazı verileri/iletileri geri almanın en kolay yoludur. Aynı şekilde

// I'm using SLIM RESTful framework... 
$dataOut = array('error'=>'Validation type', 'message'=>'Did not validate'); 
$response->body(json_encode($dataOut)); 

, bunu gibi bu yanıtı erişebilir:

model.save({},{ 
    error: function(model, response) { 
     var responseObj = $.parseJSON(response.responseText); 
     console.log('Type: ' + responseObj.error + ' Message: ' + responseObj.message); 
    } 
}); 

Ya da o çizgisinde bir şey Elbette, daha sofistike veri sunucudan iade edilecek oluşturabilir.

E.g. 
response.readyState 
response.status 
response.statusText // etc. 

Omurga sadece sunucusundan döndürülen http durumunu gerekir: Hata callback'inde geçirilen tepki jqXHR nesne olduğundan

, kullanmak isteyebilirsiniz tüm özellikleri tam erişim hakkına sahip onun şeyi yapmak için.

+0

Aslında bu konuyla yüzleşiyorum aslında, aslında. İşte soru şu: eğer SLIM RESTful API'm (teorik olarak) web istemcisi (ör. IOS, vb.) Dışındaki müşteriler tarafından kullanılabiliyorsa, SLIM 200'den fazla HTTP durum kodunu bu gibi durumlarda geri alırsa sorun olmaz mı? Yukarıda açıklanan durumlar (örn., Form doğrulama hataları, vb.), Bir sunucu hatası değildir, bunun yerine sunucu, kötü kullanıcı girdisine düzgün bir şekilde yanıt vermektedir. – hairbo

+1

Bence yorum 2 parça. 1) SLIM 200 olmayan http durum kodlarını geri geçirmeli mi? Bunu yaparak nasıl zarar vereceğini göremediğim için evet düşünürdüm. Çok sayıda istemci tarafı, başarı veya hata geri çağrılarını yürütmek için bu durum koduna dayanır. 2) Onay durumu 500 uygun mu? Hayır. Örneğimde - Tasarruf için bir sunucu olan bir problem yarattım. Sunucu tarafı doğrulama yapıyorsanız, 400 kötü bir istek iyi bir seçim olabilir. – jmk2142

+0

Doğrulama hataları için 5xx önerdiğimden emin değilim, ancak bu gerçekten sorun değil. Ben sadece bir yapışkanlı olduğumu düşünüyorum, ama sunucu hata kodları (bana, her neyse) * sunucu * ile bir şeyler ters gittiğini öneririm. Doğrulama hatası, sunucunun * istemciden * hatalı verilere doğru yanıt vermesidir. Yani bir düzeyde, 4xx ile kötü istemci verisine yanıt vermek yanlış görünüyor. Ancak, tüm dünya bunu böyle yapıyor ve ben bütün dünyayla bu noktada savaşmak üzereyim. (-; – hairbo