2010-09-17 144 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