2010-09-17 146 views
0

任何人都可以找出为什么这是抛出语法错误?所有的代码对我来说都是正确的。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; 
} 

它在第7行引发错误 - 变种pagerequest = FALSE;

如果你注释掉它,它会在下一行中引发一个错误。有任何想法吗?

在此先感谢您的帮助!

+0

分号插入细节什么是你的错误编辑? – 2010-09-17 14:09:57

+0

错误只是一个简单的“语法错误”。我已经考虑到了下面的人所说的话,而且我仍然遇到了错误。问题不在writecontent()函数中,它与ajaxinclude()函数一起使用。我也想提一下,你不需要在JavaScript中使用分号。 – Ryan 2010-09-17 17:32:28

+0

通常,这些事情发生在从网站复制和粘贴代码或使用花式Unicode字符的pdf文档使代码更好看时。但我想错误信息是错误的,真正的问题在别的地方。要检查它是否是一个真正的语法错误,请尝试在函数外部添加一些代码并查看它是否运行。如果它运行,则函数不可能包含语法错误。在这种情况下,XMLHttpRequest实现中可能存在错误,或者响应正文中存在语法错误。 – Robert 2014-06-22 00:14:13

回答

1

首先第一件事情 - 利用http://jslint.com/

它不喜欢你的writecontent功能。

pagerequest = new XMLHttpRequest()缺少分号。

此外,我还喜欢通过YUI Compressor“翻录”我的javascript,以帮助显示语法错误。

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

一些更缺少分号:

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

一两件事。尽管javascript允许你做某件事,但并不意味着你应该这样做。将pagerequest声明为布尔值,然后将其设置为ActiveXObject有点令人困惑。我可能会初始化为空。然后在代码中稍后“测试”null。

+1

分号(通常)在Javascript中是可选的,它自动执行[分号插入](http://inimino.org/~inimino/blog/javascript_semicolons)。 – 2010-09-17 14:08:33

2

Yopur writecontent是wronge(参数命名)尝试:

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

另外,有没有真正的价值,这一点:

var pagerequest = false; 

因为你永远没有在你的代码在其他地方设置它返回它可能只是:

var pagerequest; 
0

几乎所有行都缺少分号。

荡涤代码:

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

在你writecontent功能,可以调用参数page_request,但随后引用它的函数体为pagerequest(不带下划线)。

否则,您的代码应该正常工作 - 有关示例,请参阅http://jsfiddle.net/2eynH/

-1

您的代码无效。当没有它或它认为应该有它时,分号将添加到您的代码中。

所以在

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

的JavaScript编译器会做以下

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 

由于大多数人都建议运行JSLint的在它看到的错误。

从评论

你可以看到在blog

+0

这是真的吗?你是否在说,大括号*必须与'function'关键字在同一行?如果是这样,我一直在做错了。 – Segfault 2010-09-17 14:26:07

+0

@segfault是的,它确实可以做到这一点,但如果你正常缩小代码,你可以避开它。我已经添加了一个链接到我的答案显示它 – AutomatedTester 2010-09-17 14:42:50

+0

不!函数声明总是有一个主体。在body *之前插入一个分号会产生一个语法错误。这与return语句不同。该语言规定您不能在'return'关键字和返回值表达式之间换行。所以在换行前插入一个分号*消除了语法错误。 – Robert 2014-06-21 23:34:49