Javascript:函数体后面的语法错误

时间:2012-08-14 03:02:06

标签: javascript ajax syntax-error

好的,所以你知道这个错误,但为什么我能得到它呢?当我在本地运行时,我没有任何错误,但是当我上传我的项目时,我得到了这个恼人的语法错误。我检查了firebug错误控制台,这没有帮助,因为它把我所有的源都放在同一行,我已经通过Lint解析它似乎也没有找到问题 - 我刚刚格式化我的大括号以某种我讨厌的方式不同;与声明在同一行,bleugh。

function ToServer(cmd, data) {
    var xmlObj = new XMLHttpRequest();
    xmlObj.open('POST', 'handler.php', true);
    xmlObj.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xmlObj.send(cmd + data);
    xmlObj.onreadystatechange = function() {
        if(xmlObj.readyState === 4 && xmlObj.status === 200) {
            if(cmd == 'cmd=push') {
                document.getElementById('pushResponse').innerHTML = xmlObj.responseText;
            }
            if(cmd == 'cmd=pop') {
                document.getElementById('messages').innerHTML += xmlObj.responseText;
            }
            if(cmd == 'cmd=login') {
                if(xmlObj.responseText == 'OK') {
                    self.location = 'index.php';
                }
                else {
                    document.getElementById('response').innerHTML = xmlObj.responseText;
                }
            }           
        }
    }
}

function Login() {
    // Grab username and password for login
    var uName = document.getElementById('uNameBox').value;
    var pWord = document.getElementById('pWordBox').value;
    ToServer('cmd=login', '&uName=' + uName + '&pWord=' + pWord);
}


// Start checking of messages every second
window.onload = function() {
    if(getUrlVars()['to'] != null) {
        setInterval(GetMessages(), 1000);
    }
}

function Chat() {
    // Get username from recipient box
    var user = document.getElementById('recipient').value;
    self.location = 'index.php?to=' + user;
}

function SendMessage() {
    // Grab message from text box
    var from = readCookie('privateChat');
    var to = getUrlVars()['to'];
    var msg = document.getElementById('msgBox').value;
    ToServer('cmd=push','&from=' + from + '&to=' + to + '&msg=' + msg);
    // Reset the input box
    document.getElementById('msgBox').value = "";
}

function GetMessages() {
    // Grab account hash from auth cookie
    var aHash = readCookie('privateChat');
    var to = getUrlVars()['to'];
    ToServer('cmd=pop','&account=' + aHash + '&to=' + to);
    var textArea = document.getElementById('messages');
    textArea.scrollTop = textArea.scrollHeight;
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
        vars[key] = value;
    });
    return vars;
}

无论谁能解决这个问题,都能获得一枚金牌互联网奖牌。

干杯。

8 个答案:

答案 0 :(得分:17)

问题是您的服务器中的脚本在一行中,并且您在其中有注释。 //之后的代码将被视为评论。这就是原因。

function ToServer(cmd, data) {  var xmlObj = new XMLHttpRequest();  xmlObj.open('POST', 'handler.php', true);   xmlObj.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');   xmlObj.send(cmd + data);    xmlObj.onreadystatechange = function() {        if(xmlObj.readyState === 4 && xmlObj.status === 200) {          if(cmd == 'cmd=push') {             document.getElementById('pushResponse').innerHTML = xmlObj.responseText;            }           if(cmd == 'cmd=pop') {              document.getElementById('messages').innerHTML += xmlObj.responseText;           }           if(cmd == 'cmd=login') {                if(xmlObj.responseText == 'OK') {                   self.location = 'index.php';                }               else {                  document.getElementById('response').innerHTML = xmlObj.responseText;                }           }                   }   };}function Login() {   // Grab username and password for login var uName = document.getElementById('uNameBox').value;  var pWord = document.getElementById('pWordBox').value;  ToServer('cmd=login', '&uName=' + uName + '&pWord=' + pWord);}// Start checking of messages every secondwindow.onload = function() {    if(getUrlVars()['to'] != null) {        setInterval(GetMessages(), 1000);   }}function Chat() { // Get username from recipient box  var user = document.getElementById('recipient').value;  self.location = 'index.php?to=' + user;}function SendMessage() {    // Grab message from text box   var from = readCookie('privateChat');   var to = getUrlVars()['to'];    var msg = document.getElementById('msgBox').value;  ToServer('cmd=push','&from=' + from + '&to=' + to + '&msg=' + msg); // Reset the input box  document.getElementById('msgBox').value = "";}function GetMessages() {  // Grab account hash from auth cookie   var aHash = readCookie('privateChat');  var to = getUrlVars()['to'];    ToServer('cmd=pop','&account=' + aHash + '&to=' + to);  var textArea = document.getElementById('messages'); textArea.scrollTop = textArea.scrollHeight;}function readCookie(name) {    var nameEQ = name + "=";    var ca = document.cookie.split(';');    for(var i=0;i < ca.length;i++) {        var c = ca[i];        while (c.charAt(0)==' ') c = c.substring(1,c.length);        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);    }    return null;}function getUrlVars() {    var vars = {};    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {        vars[key] = value;    });    return vars;}

答案 1 :(得分:2)

你错过了一个分号:

function ToServer(cmd, data) {
    var xmlObj = new XMLHttpRequest();
    xmlObj.open('POST', 'handler.php', true);
    xmlObj.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xmlObj.send(cmd + data);
    xmlObj.onreadystatechange = function() {
        if(xmlObj.readyState === 4 && xmlObj.status === 200) {
            if(cmd == 'cmd=push') {
                document.getElementById('pushResponse').innerHTML = xmlObj.responseText;
            }
            if(cmd == 'cmd=pop') {
                document.getElementById('messages').innerHTML += xmlObj.responseText;
            }
            if(cmd == 'cmd=login') {
                if(xmlObj.responseText == 'OK') {
                    self.location = 'index.php';
                }
                else {
                    document.getElementById('response').innerHTML = xmlObj.responseText;
                }
            }           
        }
    }; //<-- Love the semi
}

额外缺少分号:

// Start checking of messages every second
window.onload = function() {
    if (getUrlVars()['to'] != null) {
        setInterval(GetMessages(), 1000);
    }
}; //<-- Love this semi too!

答案 2 :(得分:2)

我认为您可以在此处调整divide and conquer方法。删除脚本的后半部分,如果没有删除第一部分,请查看是否出现错误并查看。当我遇到这样的问题时,这是我遵循的一种技术。一旦找到带有错误的一半,然后将那一半再细分直到你指出错误的位置。

这有助于我们确定实际的错误点。

我认为这个剧本没有任何问题。

这可能不是您想要的确切解决方案,而是找到并解决问题的方法。

答案 3 :(得分:2)

enter image description here

看起来它被解释为全部在一条线上。在fiddler2中看到相同的结果。

答案 4 :(得分:1)

似乎应该在以下代码中添加另一个半

// Start checking of messages every second
window.onload = function() {
    if(getUrlVars()['to'] != null) {
        setInterval(GetMessages(), 1000);
    }
};  <---- Semi added

此处此代码中,定义函数的顶部var

function readCookie(name) {
    var i;
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

希望这会对你有所帮助

答案 5 :(得分:1)

&#34;嗯我想我找到了一个线索......我使用notepad ++并且直到最近才使用我的cpanel文件管理器来上传我的文件。在我使用FireZilla FTP客户端之前,一切都很好。我假设FTP客户端正在改变我的JS和PHP文件的格式或编码。 - &#34;

我相信这是你的问题(你可能已经解决了)。在遇到这个愚蠢的bug之后,我刚试了一个不同的FTP客户端,它运行得很完美。我假设我使用的代码(由不同的开发人员编写)也没有正确关闭注释。

答案 6 :(得分:1)

由于您的JS代码缩小了注释,因此可能会出现此问题。如果是这样,并且您想保留您的评论,请尝试更改您的评论 - 例如,从中:

// Reset the input box

...到...

/* Reset the input box */

答案 7 :(得分:1)

添加注释:很奇怪,这个错误非常随机出现,一切正常。

Syntax error missing } after function body | At line 0 of index.html

似乎我在脚本的不同部分中使用/**///和一些精美的unicode字符来表示不同的注释。

这对我来说非常有用,可以使其清晰并可以进行解析。

但是,如果在执行任何js之前,此 unicode字符以及可能在注释中的js文件上使用了其他字符,则错误是随机产生的。

这可能与以下事实有关:js文件在被父页面调用和读取之前不是UTF8,DOM准备就绪时为utf8。无法分辨。

如果可以的话!