2010-09-02 31 views
38

Aus irgendeinem Grund erhalte ich diese Fehlermeldung:Fehler: Uncaught Syntaxerror: unerwartetes Token <

Uncaught SyntaxError: Unexpected token < 

Für diese Codezeile:

title: '<img src="/images/text/text_mario_planet_jukebox.png" id="text_mario_planet_jukebox"/>', 

In diesem Zusammenhang:

$(document).ready(function() { 
    $('#infobutton').click(function() { 
     $('#music_descrip').dialog('open'); 
    }); 
     $('#music_descrip').dialog({ 
      title: '<img src="/images/text/text_mario_planet_jukebox.png" id="text_mario_planet_jukebox"/>', 
      autoOpen: false, 
      height: 375, 
      width: 500, 
      modal: true, 
      resizable: false, 
      buttons: { 
       'Without Music': function() { 
        $(this).dialog('close'); 
        $.cookie('autoPlay', 'no', { expires: 365 * 10 }); 
       }, 
       'With Music': function() { 
        $(this).dialog('close'); 
        $.cookie('autoPlay', 'yes', { expires: 365 * 10 }); 
       } 
      } 
     }); 
    }); 

Ich denke, alles sollte gut zu gehen, aber ich verstehe nicht, warum die < irgendwie wirft das weg ..

hoppla, vergessen zu zeigen, wo das passiert! My bad,

http://www.marioplanet.com/index.asp

Irgendwelche Ideen?

+3

Ich weder ich noch 'ich verstehe nicht. Vielleicht möchten Sie etwas Code teilen und erklären, was Sie zu tun versuchen, etc ...? Das Anzeigen des Fehlers ist eine Sache, aber wenn Sie wissen möchten, woher dieser Fehler kommt, müssen wir sehen, was ihn verursacht (was zweifelsohne Ihr Code ist). Auch wenn Sie Ihre Frage mit dem Tag "error" markieren, bringt das nicht viele wertvolle Informationen. –

+2

Das ist nicht wirklich eine Codezeile. Ich meine, du kannst es nicht ausführen. Gib uns wenigstens genügend Kontext, um eine vollständige Aussage zu sehen. – recursive

+0

K, mein Schlechter, ich habe versucht, es ein wenig mehr Kontext zu geben, und ich habe vergessen, einen Link zu geben, den ich ursprünglich tun wollte. – Qcom

Antwort

37

Dies ist ein Browserproblem und kein JavaScript- oder JQuery-Problem. Es versucht, die spitze Klammer als HTML-Tag zu interpretieren.

Versuch dies zu tun, wenn Ihre Javascripts Einrichtung:

<script> 
//<![CDATA[ 

    // insert teh codez 

//]]> 
</script> 

Alternativ Ihr Javascript in eine separate Datei bewegen.

Edit: Ahh .. mit diesem Link habe ich es aufgespürt. Was ich gesagt habe, war das Problem überhaupt nicht. diese ist die Frage, von der Website gestrippt:

<script type="text/javascript" 
    $(document).ready(function() { 
    $('#infobutton').click(function() { 
     $('#music_descrip').dialog('open'); 
    }); 
     $('#music_descrip').dialog({ 
      title: '<img src="/images/text/text_mario_planet_jukebox.png" id="text_mario_planet_jukebox"/>', 
      autoOpen: false, 
      height: 375, 
      width: 500, 
      modal: true, 
      resizable: false, 
      buttons: { 
       'Without Music': function() { 
        $(this).dialog('close'); 
        $.cookie('autoPlay', 'no', { expires: 365 * 10 }); 
       }, 
       'With Music': function() { 
        $(this).dialog('close'); 
        $.cookie('autoPlay', 'yes', { expires: 365 * 10 }); 
       } 
      } 
     }); 
    }); 

Können Sie den Fehler erkennen? Es ist in der ersten Zeile: das <script Tag ist nicht geschlossen. Es sollte <script type="text/javascript">

Mein bisheriger Vorschlag jedoch noch steht, sein: Sie sollten umschließen intra-markierten Skripte in einem CDATA-Block, oder in eine separat verknüpften Datei bewegen.

Das war nicht das Problem hier, aber es hätte das wirkliche Problem schneller gezeigt.

+0

Oh wowwwwwww ... Danke für den Spot, aber das war ziemlich lahm, jedenfalls habe ich die js in eine separate Datei für sauberere Code und Wartbarkeit sowieso verschoben. Vielen Dank! – Qcom

+0

Können Sie solche Ausnahmen in jquery abfangen? Das heißt, wenn meine Erfolgsmethode diese nicht abgefangenen Ausnahmen erhält, möchte ich sie abfangen und dem Benutzer eine Fehlermeldung anzeigen. – noobcode

+0

@noobcode Wenn Sie Ihr Markup nicht korrekt strukturieren, wird die Javascript-Engine kläglich versagen - oder gar nicht starten. Wie Fehler in Markup behandelt werden, sind browserspezifisch und ich bin mir nicht sicher, ob Sie einen Mechanismus bereitstellen, den Sie haken können, um dem Benutzer einen allgemeinen Zweck zu geben: "Ich vermasselte die Website, die Sie sehen möchten" Fehlermeldung. – Randolpho

-3

Ich weiß nicht, ob Sie die Antwort bekommen haben. Ich habe dieses Problem heute kennengelernt und dachte mir, dass ich eine mögliche richtige Antwort habe: Sie legen die Skriptdatei nicht an einem richtigen Ort ab.

Die meisten Leute treffen dieses Problem nicht, weil sie die Skripte direkt in ihr Serververzeichnis stellen. Ich treffe das, weil ich eine Verknüpfung der Quelldatei (der HTML-Datei) zum Server-Stammverzeichnis mache. Ich habe die Skriptdateien nicht verknüpft, und ich weiß nicht, wie nginx sie findet. Sie werden jedoch nicht korrekt geladen.

Nachdem ich alle Dateien mit dem Server-Stammverzeichnis verknüpft, Problem gelöst.

-1

Es funktioniert normalerweise, wenn Sie den Verzeichnisnamen ändern, wo sich die Datei befindet. Es funktionierte für mich, als ich es von "js /" nach "../js" bewegte

8

Ich hatte genau das gleiche Symptom, und das war mein Problem, sehr schwierig zu finden, so dass ich hoffe, es hilft jemandem .

Ich verwendete JQuery parseJSON() und der Inhalt, den ich versuchte zu analysieren war eigentlich nicht JSON, aber eine Fehlerseite, die zurückgegeben wurde.

9

Ich habe diesen Fehler auch bei der Entwicklung einer Backbone-Anwendung mit HTML5-Push-Status in Verbindung mit einem .htaccess, der unbekannte Dateien nach index.html umleitet.

Es stellt sich heraus, dass beim Besuch einer URL wie /something/5, meine /index.html effektiv bei /something/index.html serviert wurde (Dank meiner .htaccess). Dies hatte zur Folge, dass alle relativen URLs zu meinen JavaScript-Dateien (aus der index.html) herausbrachen, was bedeutete, dass sie auf mich hätten.

Allerdings, wieder aufgrund meiner htaccess, statt 404'ing beim Versuch, die JS-Dateien abrufen, sie stattdessen meine index.html zurückgegeben. So erhielt der Browser eine index.html für jede JavaScript-Datei, die er zu ziehen versuchte, und als er den HTML-Code wie JavaScript auswertete, gab er einen JS-Fehler aufgrund der führenden < (von meinem Tag in index.html) zurück. .

Die Fehlerbehebung in meinem Fall (wie ich die Website aus einem Unterverzeichnis diente) war ein Basis-Tag in meinem HTML-Kopf hinzufügen.

<base href="/my-app/">

+1

Das behob mein Problem - in meinem Fall habe ich - nie gedacht, dass es ein htaccess-Problem war! –

+0

Ich stieß auf ähnliche Problem bei der Verwendung von react-Router mit Pfaden wie "user /: userid". Durch das Hinzufügen des Basis-Tags vor meinen Ressourcen-URLs wurde es behoben. Danke @ Jeff-h! – Tim

+0

das ist wahr, aber eine Konsequenz des allgemeineren Problems, wie beschrieben durch [David.barchuizens Antwort] (https://stackoverflow.com/a/39034617/3645375) –

4

Typischerweise dies geschieht, wenn Sie eine nicht-HTML-Ressource zu laden versuchen (zB die jQuery-Bibliothek Skriptdatei als Typ text/javascript) und dem Server, statt der erwarteten JS Ressource zurückkehrt, kehrt HTML Stattdessen - in der Regel eine 404-Seite.

Der Browser versucht dann, die Ressource als JS zu analysieren, aber da tatsächlich eine HTML-Seite zurückgegeben wurde, schlägt das Parsen mit einem Syntaxfehler fehl, und da eine HTML-Seite normalerweise mit einem < Zeichen beginnt, ist dies der Zeichen, das in der Syntaxfehlerausnahme hervorgehoben ist.

+0

Jede Möglichkeit, dieses Verhalten zu deaktivieren? Erhalten Sie nicht, warum jQuery mit Ressourcen Tags –

-1

Wenn Sie dieses Problem nur in Chrome Gesicht und in IE, zum Beispiel, alles ist in Ordnung, dann nur Checkbutton "Disable Cache" in Dev-Tools aktivieren (F12 -> Registerkarte "Netzwerk") und klare Geschichte in der letzte Stunde.

Ich hatte dieses Problem und obige Lösung für mich gearbeitet.

+1

Bitte posten Sie nicht identische Antworten auf mehrere Fragen. Schreibe eine gute Antwort, dann vote/flag, um die anderen Fragen als Duplikate zu schließen. Wenn die Frage kein Duplikat ist, * schneide deine Antworten auf die Frage. * –

-1

versuchen, den Text/javascript text/html dann zu ersetzen, speichern die Notiz und Reload-Browser es dann auf Text bringen/javascript .. Ich weiß nicht, aber aus unbekannten Gründen diese funktioniert bei mir .. Ich suche und copy-pasting und ich mache nur versehentlich rückgängig, was ich tippe dann boom kablooey es funktioniert 0.O nebenbei bin ich nur noob .. sorry ich dachte nur, es könnte helfen, aber ..

Verwandte Themen