2016-01-25 38 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:大好时光。 :-) –

相关问题