2010-09-17 4 views
0

Quelqu'un peut-il comprendre pourquoi cela génère une erreur de syntaxe? Tout le code me semble correct.Erreur de syntaxe Javascript

<script type="text/javascript"> 

var rootdomain="http://"+window.location.hostname; 

function ajaxinclude(url) 
{ 
    var pagerequest = false; 
    if (window.XMLHttpRequest) // if Mozilla, Safari etc 
     pagerequest = new XMLHttpRequest() 
    else if (window.ActiveXObject){ // if IE 
     try { 
      pagerequest = new ActiveXObject("Msxml2.XMLHTTP") 
     } 
     catch (e){ 
      try{ 
       pagerequest = new ActiveXObject("Microsoft.XMLHTTP") 
      } 
     catch (e){} 
     } 
    } 
    else 
     return false 

    pagerequest.open('GET', url, false) //get page synchronously 
    pagerequest.send(null) 
    writecontent(pagerequest) 
} 

function writecontent(page_request){ 
    if (window.location.href.indexOf("http")==-1 || pagerequest.status==200) 
    document.getElementById("page1").innerHTML = pagerequest.responseText; 
} 

Il est lancer une erreur sur la ligne 7 - var pageSolliciter = false;

Si vous le commentez, une erreur se produit sur la ligne suivante. Des idées?

Merci d'avance pour votre aide !!

+0

Quelle est l'erreur que vous obtenez? –

+0

l'erreur est juste une simple "erreur de syntaxe". J'ai pris en compte ce que les gens d'en-dessous ont dit et j'ai toujours des erreurs. Le problème n'était pas avec la fonction writecontent(), c'est avec la fonction ajaxinclude(). Je voudrais également mentionner que vous n'avez pas besoin de points-virgules en JavaScript. – Ryan

+0

Habituellement, cela se produit lorsque vous copiez et collez du code à partir d'un site Web ou d'un document PDF qui utilise des caractères Unicode sophistiqués pour améliorer l'apparence du code. Mais je suppose que le message d'erreur est faux et le vrai problème est ailleurs. Pour vérifier s'il s'agit d'une erreur de syntaxe réelle, essayez de mettre du code en dehors de la fonction et regardez s'il s'exécute. Si elle s'exécute, il est impossible que la fonction contienne une erreur de syntaxe. Dans ce cas, il y a peut-être un bogue dans l'implémentation de XMLHttpRequest ou une erreur de syntaxe dans le corps de la réponse. – Robert

Répondre

1

Pour commencer - utiliser http://jslint.com/

Il n'aime pas votre fonction writecontent.

Et pagerequest = new XMLHttpRequest() est manquant un point-virgule.

Aussi, j'aime aussi "ripper" mon javascript à travers YUI Compressor pour aider à révéler les erreurs de syntaxe.

http://developer.yahoo.com/yui/compressor/

Quelques points-virgules manquants: plus

pagerequest = new ActiveXObject("Msxml2.XMLHTTP") 
pagerequest = new ActiveXObject("Microsoft.XMLHTTP") 

une chose. Même si le javascript vous permet de faire quelque chose, cela ne veut pas dire que vous devriez le faire. Déclarer pagerequest comme un booléen, puis le définir sur un ActiveXObject est un peu déroutant. Je l'initialiserais probablement à null. Puis "test" pour null plus tard dans le code.

+1

Les points-virgules sont (généralement) optionnels en Javascript, ce qui est fait automatiquement [insertion de point-virgule] (http://inimino.org/~inimino/blog/javascript_semicolons). –

2

yopur WriteContent est wronge (de nommage des arguments) essayer:

function writecontent(page_request){ 
    if (window.location.href.indexOf("http")==-1 || page_request.status==200) 
    document.getElementById("page1").innerHTML = page_request.responseText; 
} 

De plus, il n'y a pas de valeur réelle à ceci:

var pagerequest = false; 

Puisque vous revenez jamais sans le mettre quelque part ailleurs dans votre code pourrait tout aussi bien être:

var pagerequest; 
0

Il vous manque des points-virgules sur presque toutes les lignes.

Nettoyé code:

function ajaxinclude(url) { 
    var pagerequest; 

    if (window.XMLHttpRequest) { // if Mozilla, Safari etc 
     pagerequest = new XMLHttpRequest(); 
    } else if (window.ActiveXObject){ // if IE 
     try { 
      pagerequest = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try { 
       pagerequest = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (ec) {} 
     } 
    } 
    else { 
     return false; 
    } 

    pagerequest.open('GET', url, false); // get page synchronously 
    pagerequest.send(); 
    writecontent(pagerequest); 
} 

function writecontent (page_request) { 
    if (window.location.href.indexOf("http") == -1 || page_request.status == 200) { 
     document.getElementById("page1").innerHTML = page_request.responseText; 
    } 
} 
2

Dans votre fonction writecontent, vous appelez l'argument page_request, mais se réfèrent à lui dans le corps de la fonction comme pagerequest (sans le trait de soulignement).

Sinon, votre code devrait fonctionner - voir http://jsfiddle.net/2eynH/ pour un exemple.

-1

Votre code n'est pas valide. Les points-virgules sont ajoutés à votre code quand ils ne l'ont pas ou pensent qu'il devrait l'avoir.

Ainsi, dans

function ajaxinclude(url) 
{ 
    var pagerequest = false; 
    if (window.XMLHttpRequest) // if Mozilla, Safari etc 
     pagerequest = new XMLHttpRequest() 
    else if (window.ActiveXObject){ // if IE 
     try { 

le compilateur javascript va effectuer les opérations suivantes

function ajaxinclude(url); // note the semi-color meaning the { starts floating in the middle of nowhere 
{ 
    var pagerequest = false; 
    if (window.XMLHttpRequest) // if Mozilla, Safari etc 
     pagerequest = new XMLHttpRequest(); 
    else if (window.ActiveXObject){ // if IE 
     try { //and so on 

Comme la plupart des gens ont suggéré courir JSLint dessus pour voir les erreurs.

Modifier de commentaire

Vous pouvez voir les détails d'insertion-virgule dans le blog

+0

Est-ce vraiment le cas? Voulez-vous dire que l'accolade d'ouverture * doit * être sur la même ligne que le mot-clé 'function'? Si c'est le cas, je l'ai fait mal pour toujours. – Segfault

+0

@segfault Oui, il le fait mais si vous minimisez votre code normalement, vous pouvez vous en sortir. J'ai ajouté un lien vers ma réponse le montrant – AutomatedTester

+0

Non! Une déclaration de fonction a toujours un corps. Insérer un point-virgule avant le corps * crée * une erreur de syntaxe. Ceci est différent d'une déclaration de retour. Le langage dicte que vous ne pouvez pas mettre un saut de ligne entre le mot clé 'return' et l'expression de valeur de retour. L'insertion d'un point-virgule avant le saut de ligne * élimine * une erreur de syntaxe. – Robert