2013-08-27 14 views
9

Używamy Bootstrap Modal window do wyświetlania html, który jest ładowany przez zdalne źródło. Robimy to za pomocą zalecanej metody w dokumentach Bootstrap, korzystając z opcji remote i przekazując ją url. (Jak opisano here)Obsługa błędów zdalnego uruchamiania modemu Bootstrap

Na przykład:

$('#id').modal({remote:'index.html'}); 

Moje pytanie: Czy jest możliwe, aby obsłużyć błąd w przypadku, index.html nie jest dostępna?

Nie widzę żadnej odpowiedzi w dokumentacji.

Wiem, że to powinno się zdarzać rzadko, ale jeśli ktoś ma powolne lub rzadkie połączenie, wolałbym pokazać im błąd, niż po prostu powiesić z pustym modalem.

+1

dałem 1+ ale mam też zamiar dodać to Wydaje się, że niewielka szansa, że ​​pojedynczy plik będzie źle wyglądał, gdy pozostałe pliki nie są - innymi słowy, Twoja aplikacja/strona będzie prawdopodobnie problematyczna w innych obszarach, zakładając, że ten zasób jest ładowany z tego samego serwera/domeny sytuacja. –

+1

Dzięki! Tak, zgadzam się. Zauważyliśmy ten problem szczególnie na urządzeniach mobilnych - które z oczywistych względów mogą zrzucić połączenia, ponieważ zasięg nie zawsze jest doskonały. Kiedy to nastąpi, cała nasza aplikacja zostaje zamrożona, ponieważ nie ma żadnych warunków (o ile mogę to stwierdzić) dla błędów/przekroczeń czasu.Dostajesz ciemne tło obejmujące stronę - dopóki nie wykonasz twardego resetu. – nostromo

Odpowiedz

5

Możesz realizować globalną Ajax Error Handler w swojej app, to dołączyć do każdego żądania Ajax, który jest wykonywany, wdrożenie będzie wyglądać mniej więcej tak:

$(document).ajaxError(function(event, jqxhr, settings, exception) { 
    //Since this handler is attach to all ajax requests we can differentiate by the settings used to build the request 
    if (settings.url == "index.html") { 
    //Handle error 
    } 
}); 

można przeczytać więcej na temat globalnego Ajax Rączki here

+0

O rany! Świetny punkt. –

3

Obecnie repo Github (/js/modal.js) zawiera ten fragment w modalnej definicji wtyczkę:

… 
if (this.options.remote) this.$element.load(this.options.remote) 
… 

Co wskazuje, że nie zwrotna jest używana, wynik wniosek jest bezpośrednio przypisany do elementu DOM w trakcie opracowywania .

Od docs jQuery.load:

Metoda ta jest najprostszym sposobem, aby pobrać dane z serwera. Jest to mniej więcej równoznaczne z $ .get (adres URL, dane, sukces), z tą różnicą, że jest to metoda , a nie globalna, i ma ukrytą funkcję oddzwaniania ( ). Po wykryciu pomyślnej odpowiedzi (tj. Gdy tekstStatus jest "sukcesem" lub "niezmodyfikowanym"), metoda .load() ustawia zawartość HTML dopasowanego elementu do zwróconych danych.

dalszej części dokumentu znajduje się snippt kod, który opisuje, jak wykryć awarię z load:

$("#success").load("/not-here.php", function(response, status, xhr) { 
    if (status == "error") { 
    var msg = "Sorry but there was an error: "; 
    $("#error").html(msg + xhr.status + " " + xhr.statusText); 
    } 
}); 

Wydaje się, że zespół zdecydował się Twitter nie obsługi błędu.

Może nadszedł czas, aby rozpocząć problem, wydaje się jak „pierwszy” ruchomej biblioteki chciałby obsługiwać tego rodzaju rzeczy wdzięcznie ;-) https://github.com/twbs/bootstrap/issues