2013-08-06 34 views
12

你好我正在使用angularjs通過Chrome控制檯這個錯誤的鉻控制檯:語法錯誤:意外標記N的距離angularjs

SyntaxError: Unexpected token N 
    at Object.parse (native) 
    at fromJson (http://localhost:3000/assets/angular.js?body=1:803:14) 
    at $HttpProvider.defaults.defaults.transformResponse  
http://localhost:3000/assets/angular.js?body=1:9471:18) 
    at http://localhost:3000/assets/angular.js?body=1:9446:12 
    at Array.forEach (native) 
    at forEach (http://localhost:3000/assets/angular.js?body=1:149:11) 
    at transformData (http://localhost:3000/assets/angular.js?body=1:9445:3) 
    at transformResponse (http://localhost:3000/assets/angular.js?body=1:10061:17) 
    at wrappedCallback (http://localhost:3000/assets/angular.js?body=1:7510:59) 
    at http://localhost:3000/assets/angular.js?body=1:7583:26 angular.js?body=1:6350 
(anonymous function) angular.js?body=1:6350 
(anonymous function) angular.js?body=1:5421 
wrappedCallback angular.js?body=1:7512 
(anonymous function) angular.js?body=1:7583 
Scope.$eval angular.js?body=1:8927 
Scope.$digest angular.js?body=1:8790 
Scope.$apply angular.js?body=1:9013 
done angular.js?body=1:10266 
completeRequest angular.js?body=1:10450 
xhr.onreadystatechange 

我通過角做一個get()請求,其中JSON是:

[{"_id":"51f96144c885552bda000015","company_id":"51f82116c88555bf48000004","description":"ENGINEER FOR BEST COMPANY", 
"industry_id":null,"location_city":"Pittsburgh","location_coordinates":[-79.9556424,40.4379259],"location_state":"PA","location_zip":"15213","name":"Engineer "}, 
{"_id":"51f972a5c885552bda000026","company_id":"51f82116c88555bf48000004","description":"has to do everything","industry_id":null,"location_city":"Pittsburgh","location_coordinates":[-79.9418166,40.4443735],"location_state":"PA","location_zip":"15289","name":"job #2"}] 

有誰知道這是什麼意思?

+1

你是如何產生的JSON?它似乎是畸形的。 – Blender

+1

看起來像mongodb json – ryudice

+1

是的,它的mongodb json用於我的rails應用程序 –

回答

26

任何SyntaxError: Unexpected token意味着你有一些格式不正確的JSON,它通常是那裏沒有用引號括起來的字符串。只有下列是supported data-types在JSON:

  • 串(包裹在引號任何文本)
  • 陣列(一個 '陣列文字',在[]
  • 對象(一個 '對象常量',在{}
  • 布爾型(truefalse,在引號不裹)
  • 整數或數字(未包裹在引號)
  • 空(未包裹在QUOT ES)

具體來說,SyntaxError: Unexpected token N往往是意外返回在JSON一個NaN,雖然它可能僅僅是一些其他的展開串的結果。 NaN不是JSON支持的值,也不是其他文本不包含在引號中,除了true,falsenull(和數字)。所以,儘管在JSON示例中的確有兩個null,但它不應該是問題所在。 (您「N」在錯誤不是小寫的,因爲它會在null。)

是大寫字母「N」在錯誤的存在使我懷疑,你是不小心在返回NaN你的地方JSON輸出,即使它不在您的示例中。您樣本中唯一的其他首字母N都安全地包裹在引號中,並且在任何情況下都位於字符串中間。

關鍵是要確保您正確清理服務器上的輸出,並用零代替任何NaN值,或者用引號括起來等等。或者,您可以嘗試在客戶端上處理此類錯誤,但在起點上它更容易,因此您可以在生成內容的地方使用條件邏輯,而不需要使用「髒JSON解析器」。 (這有點像在睡覺之前清理地板,而燈光仍然亮着,而且你知道一切都在哪裏,而不需要在黑暗中檢測並避免未知障礙物。)

1

它也可能是結果

Notice: Undefined index: project_id in /var/www/html/ 

由php生成。

+0

優秀點。或者,更一般地說,我們可以說這可能是由於未經過清理直接輸入到輸出中的任何未捕獲的錯誤造成的。 – XML

1

我有同樣的問題,用另一個字母代替N. 經過幾次測試,我意識到這封信實際上是我發送的字符串的第一個字母(我認爲它被轉換成了JSON)! (在我的情況H爲「Hello World」)。

問題是我發送的JSON無效。(JSON只是一個與它關聯的規範的字符串,可以在不同的接口之間識別它) 事實上,我只是發送一個字符串,它沒有用JSON規範序列化(以正確的格式)。我認爲你的情況也是如此。 因此,該錯誤來自您的後端。修復取決於您使用的是哪個後端。如果是java,我可以幫助你!

您可以嘗試發送有效的JSON,替換您發送的數據(由 {「id」:1,「name」:「test」},這是一個有效的JSON。你的錯誤應該消失在這種情況下,這證明你的JSON序列化是不正確的。

1

在我的情況下,當使用JSON.parse()方法時,json字符串是而不是,格式良好。

非正式

{ 
    name: "Jhon Brown", 
    age: 30, 
    motto: "Please, choose good." 
} 

會產生錯誤,如:SyntaxError: Unexpected token n at Object.parse (native)

正式

{ 
    "name": "Jhon Brwon", 
    "age": 30, 
    "motto": "Please, choose good." 
}