2010-03-16 3 views
2

J'écris du code HTML pour une servlet Java. J'écris d'abord le code en html/js afin que je puisse déboguer sur quoi je travaille, puis en faire une chaîne java et la mettre dans ma servlet. Mon problème est que le code fonctionne bien quand je l'affiche en ff à partir d'un fichier html local, mais quand je l'affiche sur mon servlet java, ça ne marche pas car le js n'est pas appelé. Ce que j'ai fait a été de formater le code html que mon servlet a généré afin que ce ne soit pas tout sur une seule ligne et de réexécuter le code. Cette fois ça a marché. J'ai copié ce code de travail dans une barre d'adresse du navigateur pour que ce soit sur une seule ligne, et copié ce code dans le script de mon fichier html. Maintenant, lorsque le code précédemment utilisé est sur une seule ligne, cela ne fonctionne pas.Pourquoi ce code JS ne fonctionnera-t-il pas si tout est sur la même ligne?

Voici la JS format:

var sMax 
var holder; 
var preSet; 
var rated; 

var request; 

function rating(num){ 
    sMax = 0; 
    for(n=0; n<num.parentNode.childNodes.length; n++){ 
     if(num.parentNode.childNodes[n].nodeName == "A"){ 
      sMax++; 
     } 
    } 

    if(!rated){ 
     s = num.id.replace("_", ''); 
     a = 0; 
     for(i=1; i<=sMax; i++){ 
      if(i<=s){ 
       document.getElementById("_"+i).className = "on"; 
       document.getElementById("rateStatus").innerHTML = num.title; 
       holder = a+1; 
       a++; 
      }else{ 
       document.getElementById("_"+i).className = ""; 
      } 
     } 
    } 
} 

function off(me){ 
    if(!rated){ 
     if(!preSet){ 
      for(i=1; i<=sMax; i++){ 
       document.getElementById("_"+i).className = ""; 
       document.getElementById("rateStatus").innerHTML = me.parentNode.title; 
      } 
     }else{ 
      rating(preSet); 
      document.getElementById("rateStatus").innerHTML = document.getElementById("ratingSaved").innerHTML; 
     } 
    } 
} 


function rateIt(me){ 
    if(!rated){ 
     document.getElementById("rateStatus").innerHTML = document.getElementById("ratingSaved").innerHTML + " "+me.title; 
     preSet = me; 
     rated=1; 
     sendRate(me); 
     rating(me); 
    } 
} 


function sendRate(sel){ 

    alert("Your rating was: "+sel.title); 

    addRating("rating", "?truck=kogibbq?rating="+ sel.id); 
} 



function addRating(servletName, servletArguments){ 
    var servlet = servletName; 
    var arg = servletArguments 
    var req = servlet + arg; 
    alert(req); 
    addrequest(req); 
    request.onreadystatechange = function(){ 

     alert("response received"); 
    } 
} 

function addrequest(req) { 
    try { 
     request = new XMLHttpRequest(); 
    }catch (e) { 

     try { 
      request = new ActiveXObject("Microsoft.XMLHTTP"); 
     }catch (e) { 
      alert("XMLHttpRequest error: " + e); 
     } 
    } 

    request.open("GET", element, true); 
    request.send(null); 
    return request; 
} 

Merci.

Répondre

4

Il vous manque des points-virgules sur:

var sMax 

et

var arg = servletArguments 
+0

Il manque des points-virgules dans de nombreux endroits, chaque instruction devrait se terminer par un point-virgule, spécialement si vous l'exécutez dans un minifiche. PhpStorm peut vous avertir des points-virgules manquants, ou simplement utiliser JSLint comme mentionné. –

0

Il y a un ; manquant dans la première ligne de votre fichier javascript.

2

Sarfraz a déjà signalé les clauses de rupture dans ce code, mais pour des problèmes similaires à l'avenir, je recommande de coller votre code dans JSLint, pour validation.

Il trouvera beaucoup d'erreurs qui ne briseront pas réellement votre code (mais alors le manque de points-virgules à moins que vous ne mettiez le script entier dans une ligne), ainsi vous ne devez pas fixer chaque seul remarquez juste pour le faire fonctionner, mais bien sûr, si vous pouvez suivre les recommandations exactes JSLint, c'est génial.

Questions connexes