2010-03-12 27 views
13

Je suis en train de construire quelque chose sur javascript que je peux avoir une entrée qui peut être tout comme chaîne, xml, javascript et (chaîne non javascript sans guillemets) comme suit :javascript - prises SyntaxError et exécuter la fonction alternative

//strings 
    eval("'hello I am a string'"); /* note the following proper quote marks */ 

//xml 
    eval(<p>Hello I am a XML doc</p>); 

//javascript 
    eval("var hello = 2+2;"); 

donc, ce 3 premier fonctionnent bien, car ils sont des formats simples natifs javascript

mais lorsque je tente utiliser l'intérieur javascript

//plain-text without quotes 
    eval("hello I am a plain text without quotes"); 
    //--SyntaxError: missing ; before statement:--// 

De toute évidence, javascript interprète cela comme une erreur de syntaxe car il pense que son javascript lève une erreur de syntaxe.

Donc ce que je voudrais faire pour attraper cette erreur et effectuer la méthode d'ajustement si cela se produit.

J'ai déjà essayé avec try catch mais cela ne fonctionne pas car il continue à renvoyer l'erreur de syntaxe dès qu'il essaie d'exécuter le code.

Toute aide serait appréciée

cheers :)

Informations supplémentaires: Imaginez un fichier externe que javascript lirait, en utilisant SpiderMonkey, il est donc une étoffe non-navigateur (je ne peux pas utilisez HttpRequest, DOM, etc ...) .. pas sûr si cela compte, mais il est là. :)

Répondre

20

Etes-vous sûr qu'un bloc Try...Catch ne fonctionnera pas? Cet exemple fonctionne pour moi dans Firefox.

try { 
    eval("hello I am a plain text without quotes"); 
} catch(err) { 
    alert("error caught"); 
} 
+0

ha qui est juste (quelle bête :()! Merci jesse beaucoup, je tentais avant de déclarer directement sans eval, c'est pourquoi j'ai l'erreur ... mais à l'intérieur du eval il a très bien fonctionné! acclamations :) – zanona

+0

Ouais, je ne vois pas ce qui ne va pas avec cette façon de le faire. – Robusto

+2

J'ai aussi essayé d'attraper une erreur de syntaxe mais il l'a envoyé à la console comme "non pris" de toute façon. L'erreur de syntaxe a été provoquée par une requête ajax avortée pas un "eval" mais c'est le même concept, je pensais que '' try..catch'' fonctionnerait mais ce n'était pas le cas. –