2017-02-13 3 views
0

Ich habe eine grundlegende Funktion in JavaScript, die einfach einige voreingestellte Werte nimmt und sie auf dem Bildschirm mit Hilfe einer vorgefertigten Funktion setzt. Wenn ich die erste Zeile von dem, was ich gerade mache, breakpoint, lädt die Seite wie erwartet, aber sobald ich diesen Haltepunkt entferne, wird keine der Informationen gesetzt. und die Seite ist leer.JavaScript funktioniert nur mit einem Breakpoint-Set im Browser-Debugger

this.QuizSelection = function() { 
     // Fill the ID's with the right info 
     app.SetBackground('head', this.HeroImage); 
     console.log('1 ' + this.HeroImage); 
     app.LoadInnerHTML('breadcrumbs', 'Home/' + this.Title); 
     app.LoadInnerHTML('quizSelectionTitle',this.Title); 
     console.log('2 ' + this.Title); 
     app.LoadInnerHTML('quizSelectionIntro',this.Introduction); 
     console.log('3 ' + this.Introduction); 
     // Show the Quiz Selection and Heading 
     app.ShowSection('head'); 
     app.ShowSection('quizSelection'); 
     console.log('Quiz Selection'); 
    }.bind(this); 

Die Funktionen innerhalb dieser (setBackground und LoadInnerHTML) sind nur kleine Linienfunktionen, die die innere HTML und der Satz ein Hintergrundbild zu ändern.

// Change Inner HTML 
this.LoadInnerHTML = function (id, html) { 
    var d = document.getElementById(id); 
    d.innerHTML = html; 
} 

// Set Background Image 
this.SetBackground = function (id, image) { 
    document.getElementById(id).style.backgroundImage = 'url(image)'; 
} 

Ich kann nicht verstehen, warum es nicht funktionieren würde, wenn der Haltepunkt nicht eingeschaltet ist. Offensichtlich funktioniert es, weil alles, was mit dem Haltepunkt ist in Ordnung, aber dann, wenn es aus dem Ergebnis, das ich bekomme auf die Konsole ist:

1  
2 
3 undefined 
Quiz Selection 
+1

Es ist nicht so, wie Sie die Daten zeigen, es ist, wie Sie es in erster Linie bekommen. Woher kommen 'this.Title',' this.Introduction' usw.? – JJJ

+0

Kommen aus einer JSON-Datei - sie laden in Ordnung, wenn ich die Variablen im Debugger –

+1

Ajax Anruf ansehen? Beste Vermutung: [Wie gebe ich die Antwort von einem asynchronen Anruf zurück?] (Http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – JJJ

Antwort

2

Sie haben eine Race-Bedingung.

Wenn Sie einen Haltepunkt ankreuzen, wartet Ihr Code darauf, dass der asynchrone JSON-Ladevorgang abgeschlossen wird. Ohne den Haltepunkt wird der Code, der versucht, den JSON zu lesen, ausgeführt, bevor der JSON tatsächlich geladen wurde.

Weitere Informationen zum Beheben dieses Problems finden Sie unter How do I return the response from an asynchronous call?.

+0

Ich habe mir das mal angeschaut - das größte Problem ist, dass ich JQuery nicht benutzen kann - ich kann nur JS benutzen - kann ich das sme Ding in dem obigen Post ohne JQuery machen? –

+1

@WebDevelopWolf Ja, es gibt nichts Spezifisches an jQuery, das das möglich macht. Ihre Json-Last wird eine Möglichkeit haben, Code auszuführen, wenn der Ladevorgang abgeschlossen ist – Jamiec

-4

Sie haben console.log Anweisungen in Ihrem Code. Wenn der Debugger nicht aktiviert ist, ist das Konsolenobjekt nicht vorhanden (dies gilt für IE nach bestem Wissen nicht für Chrome). Daher schlägt die Ausführung des JavaScript-Codes fehl.

+1

Die Frage sagt "wenn es aus dem Ergebnis ist, bekomme ich Ausgabe an die Konsole", so kann es nicht auf Ausnahmen beruhen, die von einem fehlenden Konsolenobjekt ausgelöst werden. – Quentin

+0

Ich benutze IE nicht Ich benutze Firefox im Moment - aber was @Quentin sagte war auch wahr, dass ich nur diese Fehler bekomme, wenn der Breakpoint NICHT gesetzt ist - danke für die Info, da ich das nicht wusste :) –

Verwandte Themen