2016-01-25 41 views
6

我從服務器接收以下JSON:遺漏的類型錯誤:無法符號值轉換爲字符串

enter image description here

然後我想它在AJAX使用$ .MAP映射通話的success,如下:

$.ajax({ 
     type: "GET", 
     url: urlGetStaticData, 
     success: function (data) { 
      self.AvailableTags(data[0].Value); 
      self.MeasurementUnits($.map(data[1].Value, function (item) { return ko.mapping.fromJS(item) })); 

最後一行拋出以下異常:

Uncaught TypeError: Cannot convert a Symbol value to a string

當它試圖映​​射屬性與Symbol名稱。

從我讀過的內容來看,JavaScript最近(或至少計劃過)添加了一個「新的符號原始類型」。這個問題可以相關嗎?有什麼解決方法?任何幫助不勝感激。

+1

@MikeC我認爲這裏真正的問題是,一個Symbol實例在這裏首先涉及到了什麼?它不能來自'JSON.parse()'結果。 – Pointy

+2

如果'data'是反序列化的JSON,它將不會有任何'Symbol'命名的屬性或'Symbol'值,所以我看不到如何運行這個。你能創建一個[MCVE](/ help/mcve)嗎? –

回答

8

這裏的問題是KO試圖使用名爲Symbol的函數(因爲KO可觀察函數是函數),因爲數據中的某個屬性被稱爲Symbol。但在ES2015引擎上,將會有一個全球性的功能作爲JavaScript環境的一部分。所以KO調用了這個函數,取而代之的是一個Symbol,然後(顯然)做了一些試圖將該值強制轉換爲字符串的操作。哪個失敗。 (我不知道爲什麼結束調用全球Symbol而不是一些陰影,但是KO使用了一些相當複雜的動態代碼和with語句,所以...)

這將是在一個錯誤KO mapper是由最近的JavaScript語言變化帶來的。作爲短期修復,在映射之前重命名屬性。

+0

啊,這很有道理。那裏有點棘手的bug。 –

+0

@MikeC:大好時光。 :-) –

相關問題