2013-02-04 98 views
14

我已經花了整整一天的時間,使用Google搜索並尋找答案,但仍然無法弄清楚。爲什麼我總是從Chrome中獲得「Uncaught SyntaxError:Unexpected token u」?

我的代碼有點長,它在Firefox中運行良好,但從Chrome獲取「Uncaught SyntaxError:Unexpected token u」。

任何人都可以指出我哪裏錯了嗎?提前致謝!

// when the page loads, list all the current contacts 
$(document).ready(function(){ 

    // check if localStorage database exists 
    if(!localStorage.getItem("customerDatabase")){ 

     // define a JSON object to hold all current address 
     var contacts = { 
      "users":[ 
       { 
        "id":"1", 
        "name":"dennis", 
        "email":"[email protected]" 
       }, 
       { 
        "id":"2", 
        "name":"zoe", 
        "email":"[email protected]"    
       } 
      ] 
     } // end of contacts JSON object 

     // stringify the object 
     var stringObject = JSON.stringify(contacts);     

     // store it into localStorage database 
     var storedDatabase = localStorage.setItem("customerDatabase", stringObject);            

    } else { 
     // list all customers upon page loads 
     listJSONCustomers();   
    } 

    // list all current contacts from JSON object in localStorage 
    function listJSONCustomers(){ 

     var displayHTML = ""; 
     var i; 

     // get the data from localStorage 
     var storedDatabase = localStorage.getItem("customerDatabase"); 

     // parse the data from string to JSON object 
     var parseObject = JSON.parse(storedDatabase); 

     // access the users key of the JSON object 
     var userObject = parseObject.users; 

     // get the length of the object (how many customers the database has) 
     var contactsLength = userObject.length;  

     for(i=0; i<contactsLength; i++){ 
      var trElement = '<tr id="address' + (i+1) + '">'; 
      var tdId = '<td id="id' + (i+1) + '">' + userObject[i].id + '</td>'; 
      var tdName = '<td id="name' + (i+1) + '">' + userObject[i].name + '</td>'; 
      var tdEmail = '<td id="email' + (i+1) + '">' + userObject[i].email + '</td>'; 
      var tdButton = '<td id="button"><button id="editButton' + userObject[i].id + '">Edit</button> | <button id="deleteButton' + userObject[i].id + '">Delete</button></td>'; 

      displayHTML += trElement + tdId + tdName + tdEmail + tdButton + '</tr>'; 
     }  

     $('#address_list').html(displayHTML);   
    }  

    // add customer to database 
    $('#saveCustomer').click(function(){ 

     if($('#customerName').val() !== "" && $('#customerEmail').val() !== ""){ 

      var customerName = $('#customerName').val(); 
      var customerEmail = $('#customerEmail').val(); 

      // get the data from localStorage 
      var storedDatabase = localStorage.getItem("customerDatabase"); 

      // parse the data from string to JSON object 
      var parseObject = JSON.parse(storedDatabase);  

      // access the users key of the JSON object 
      var userObject = parseObject.users;  

      // get the new entry 
      var newCustomerObject = { 
            "id": userObject.length + 1, 
            "name": customerName, 
            "email": customerEmail 
            }; 

      // push the new entry into the object                
      userObject.push(newCustomerObject); 

      // convert the object into string for localStorage 
      var stringObject = JSON.stringify(parseObject);   

      // store the JSON object into localStorage 
      var storedDatabase = localStorage.setItem("customerDatabase", stringObject); 

      // list all customes again every time a database receives a new entry 
      listJSONCustomers();  

     } else { 
      alert("Please enter customer's name and email."); 
     } 

    }); // end of $('#saveCustomer').click(); 


}); 
+0

我不明白鉻的錯誤,如果我複製並通過此代碼。你確定錯誤屬於這個文件,而不是一個擴展? –

+1

也許你從早些時候在本地存儲中保存了一些損壞的東西?如果在調用'parse()'之前打印字符串,它看起來是否正確?根據錯誤,本地存儲值不會在你的''用戶「鍵上引用引號。 – loganfsmyth

+0

@loganfsmyth,我在調用parse()之前打印了字符串,Firefox返回一個不錯的字符串,但Chrome返回'undefined'。但那是怎麼回事? – Dennisboys

回答

18

在某些情況下,您確實損壞了LocalStorage對該密鑰的價值。 LocalStorage只能存儲字符串,所以如果你傳遞任何東西給它,它會將它轉換爲一個字符串。因爲你的價值是'undefined',這意味着,在某些時候,你可能沒有事故是這樣的:

var value; 
localStorage.setItem('key', value); 

在這種情況下,valueundefined,這不是一個字符串。當它被保存時,它將被轉換。不幸的是,"undefined"是無效的JSON。這意味着當它試圖解析時,它會拋出異常。

要解決您的問題,您應該清除與removeItem出錯的值。

localStorage.removeItem("customerDatabase"); 
+1

但是,爲什麼Firefox給一個不錯的字符串,而不是未定義的。這個問題只出現在Chrome上,不是?如問題中所述。正如Dennisboys所評論的那樣,只有在打印時纔會出現未定義的問題。 – ALBI

+0

@ALBI由於這是使用本地存儲,因此值可能來自*之前*代碼看起來正確。也許他是在Chrome中開發的,並且曾經有過一個錯字,所以Chrome的價值不正確。當它在Firefox中加載時,代碼是正確的,所以Firefox永遠不會有損壞的存儲值。 – loganfsmyth

+0

好的,謝謝loganfsmyth。 – ALBI

相關問題