2013-08-27 15 views
9

Wir verwenden Bootstrap Modal window, um einige HTML anzuzeigen, die über eine Remote-Quelle geladen wird. Wir tun dies über den empfohlenen Weg in der Bootstrap Dokumentation, indem Sie die Option remote verwenden und eine url übergeben. (Wie here beschrieben)Bootstrap Modal Remote Source Fehlerbehandlung

Zum Beispiel:

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

Meine Frage: Ist es möglich, einen Fehler in dem Fall zu behandeln, die index.html nicht verfügbar ist?

Ich sehe keine Antwort in der Dokumentation.

Ich weiß, dass dies selten passieren sollte, aber wenn jemand eine langsame oder fleckige Verbindung hat, würde ich ihnen lieber einen Fehler zeigen, als einfach mit einem leeren Modal zu hängen.

+1

ich habe eine 1+, aber ich bin auch gehen um es hinzuzufügen scheint eine geringe Chance zu sein, dass eine einzelne Datei schlecht vorformatiert wird, wenn der Rest der Dateien nicht vorhanden ist - mit anderen Worten, Ihre App/Seite wird wahrscheinlich in anderen Bereichen problematisch sein, vorausgesetzt, dass dieses Asset vom selben Server/derselben Domain geladen wird Lage. –

+1

Danke! Ja, ich stimme zu. Wir haben dieses Problem speziell auf Mobilgeräten festgestellt - aus offensichtlichen Gründen können Verbindungen als Abdeckung nicht immer perfekt sein. Wenn dies passiert, ist unsere gesamte App eingefroren, da sie (soweit ich das beurteilen kann) keine Bedingungen für Fehler/Zeitüberschreitungen hat.Sie erhalten nur den dunklen Hintergrund für die Seite - bis Sie einen Hard-Reset durchführen. – nostromo

Antwort

5

Sie können einen globalen Ajax Error Handler in Ihrem implementieren app, dies zu jeder Ajax-Anfrage angehängt werden, die ausgeführt wird, würde die Umsetzung in etwa so aussehen:

$(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 
    } 
}); 

Sie können mehr über Global Ajax Handlers lesen here

+0

Oh, schnapp! Großer Punkt. –

3

Derzeit die Github repo (/js/modal.js) enthält dieses Fragment in der modalen Plugin Definition:

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

, die anzeigt, dass kein Rückruf verwendet wird, wird das Ergebnis der Anfrage direkt an das DOM-Elemente zugeordnet gearbeitet wird auf .

Aus der Dokumentation jQuery.load:

Diese Methode ist die einfachste Möglichkeit, Daten vom Server zu holen. Es ist grob entspricht $ .get (URL, Daten, Erfolg), außer dass es eine Methode ist, anstatt globale Funktion und es hat eine implizite Rückruffunktion Funktion. Wenn eine erfolgreiche Antwort erkannt wird (d. H. Wenn textStatus "Erfolg" oder "nicht geändert" ist), legt .load() den HTML-Inhalt des übereinstimmenden Elements auf die zurückgegebenen Daten fest.

Später im doc gibt es einen Code snippt, die beschreibt, wie ein Ausfall mit load erkennen:

$("#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); 
    } 
}); 

Es scheint, das Twitter-Team entschieden nicht die Fehler zu behandeln.

Vielleicht ist es Zeit, ein Problem zu beginnen, scheint es wie eine „mobile first“ Bibliothek möchte diese Art der Sache behandeln anmutig ;-) https://github.com/twbs/bootstrap/issues