Почему этот код JS не работает, если все в одной строке? - PullRequest
2 голосов
/ 16 марта 2010

Я пишу HTML-код для Java-сервлета. Сначала я пишу код в html / js, чтобы можно было отлаживать то, над чем я работаю, а затем я делаю это в виде строки Java и помещаю ее в мой сервлет. Моя проблема в том, что код работает нормально, когда я просматриваю его в ff из локального html-файла, но когда я просматриваю его в своем сервлете java, он не работает, потому что js не вызывается.

я отформатировал html, сгенерированный моим сервлетом, чтобы он не находился в одной строке и снова запустил код. На этот раз это сработало. Я скопировал этот рабочий код в адресную строку браузера, чтобы он был в одной строке, и скопировал этот код обратно в скрипт в моем html-файле. Теперь, когда ранее работающий код находится в одной строке, он не работает.

Вот отформатированный JS:

    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;
}

Спасибо.

Ответы [ 3 ]

4 голосов
/ 16 марта 2010

Вам не хватает точек с запятой:

var sMax

и

var arg = servletArguments
2 голосов
/ 16 марта 2010

Sarfraz уже указал на нарушителей в этом коде, но для подобных проблем в будущем я рекомендую вставить ваш код в JSLint , для проверки.

Он обнаружит множество ошибок, которые на самом деле не нарушат ваш код (но не будет и отсутствие точек с запятой, если вы не поместите весь скрипт в одну строку), поэтому вам не нужно исправлять каждое отдельное замечание просто чтобы заставить его работать, но, конечно, если вы можете следовать точным рекомендациям JSLint, это, как правило, просто замечательно.

0 голосов
/ 16 марта 2010

В первой строке вашего файла javascript отсутствует ;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...