2014-11-25 56 views
1

我有這個項目中,我得到的錯誤Uncaught SyntaxError: Unexpected end of input上的我的HTML代碼,這是DOCTYPE標籤1號線。我不知道如何解決這個問題,因爲標籤沒有結束標籤..我只在運行AJAX異步時纔會出現這個錯誤,我必須這樣做,否則AJAX會以無限循環的方式卡住。利用它與API進行交互,該API捕捉日曆年的所有紅色日子。有關我如何解決此問題的任何想法?我一直在尋找一個答案,但我還沒有找到任何符合我的問題。DOCTYPE標籤的「輸入意外結束」異步而不是在同步

這裏是我的AJAX代碼:

var xhr = new XMLHttpRequest(); 
     xhr.open('GET', 'http://api.dryg.net/dagar/v2/' + year, true); 
     xhr.send(); 
    var json = JSON.parse(xhr.responseText); 

    for (item in json.dagar) { 

     var propertyObject = json.dagar[item]; 

     for (subitem in propertyObject) { 

      if (subitem === 'röd dag') { 

       var redDay = propertyObject[subitem]; 

       if (redDay === 'Ja') { 

        calendar.markRedDays(propertyObject.datum); 
        break; 
       } 
      } 
     } 
    } 

這是HTML:

<!DOCTYPE html> <--- This is where the error points to 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Online Calender</title> 
    <script src='https://cdn.firebase.com/js/client/1.1.1/firebase.js'></script> 
    <link href='http://fonts.googleapis.com/css?family=Port+Lligat+Sans' rel='stylesheet' type='text/css'> 
    <link rel='stylesheet' type='text/css' href='style.css'> 
</head> 
<body> 
    <script src='https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'></script> 
    <script src="firebase1.js"></script> 
</body> 
</html> 
+0

你應該閱讀了關於如何異步請求與XMLHttpRequest的工作:[MDN文檔(https://開頭developer.mozilla.org/en-US/docs/AJAX/Getting_Started)。你需要註冊一個回調處理函數:'httpRequest.onreadystatechange = callbackFunction' – 2014-11-25 12:08:34

+0

@LLKL回調函數是否包含從​​到Down的所有內容?我試着添加一個回調函數,但它不起作用,我對如何去做這件事感到困惑。 – Chrillewoodz 2014-11-25 12:45:34

回答

0

看來,響應(xhr.responseText)是空的,因爲該請求是ascynchronous(它有沒有尚未收到)。

引發異常的方法是JSON.parse。

的回調應該註冊(如在你的問題的第一個註釋說明)來處理響應。

請注意,當reposone不是JSON你應該處理的情況。例如,它可能是一個HTML頁面,表示發生了錯誤。

好運

0

好吧,事實是你需要學習AJAX是如何工作的,並在評論中閱讀文檔我linked

var xhr = new XMLHttpRequest(); 
xhr.open('GET', 'http://api.dryg.net/dagar/v2/' + year, true); 
xhr.httpRequest.onreadystatechange = callbackFunction; 
xhr.send(); 
alert("this alert is triggered after the request was sent but before it returned") 

現在發送請求,它最終會返回,但您的代碼將繼續通過正常流程運行。一旦請求返回,它將觸發「onreadystatechange」事件。由於我在上面添加的這一行會調用你的回調函數。這應該如下所示:

var callbackFunction = function(){ 

// This is the state when the xhr request has returned, see the docs 
if (xhr.readyState === 4) { 
    // This means there was no error. 
    if (xhr.status === 200) { 

    //Here you can access the response of the xhr 
    var json = JSON.parse(xhr.responseText); 

    for (item in json.dagar) { 

     var propertyObject = json.dagar[item]; 

     for (subitem in propertyObject) { 

      if (subitem === 'röd dag') { 

       var redDay = propertyObject[subitem]; 

       if (redDay === 'Ja') { 

        calendar.markRedDays(propertyObject.datum); 
        break; 
       } 
      } 
     } 
    } 

    } else { 
    alert('There was a problem with the request.'); 
    } 
} 

如果它仍然是看不清楚的例子的MDN文檔頁面