我从服务器收到以下JSON:
然后我尝试在AJAX调用success
中使用$ .map映射它,如下所示:
$.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) }));
并且最后一行抛出以下异常:
未捕获的TypeError:无法将Symbol值转换为字符串
当它尝试使用Symbol
名称映射属性时。
从我所读过的内容来看,javascript最近(或至少计划过)添加了一个新的符号原语类型"。这个问题可能有关系吗?有什么解决方法?非常感谢任何帮助。
答案 0 :(得分:8)
这里的问题是KO正在尝试使用名为Symbol
的函数(因为KO observables是函数),因为数据中的一个属性称为Symbol
。但是在ES2015引擎上,作为JavaScript环境的一部分,将有一个全局Symbol
函数。因此,KO调用该函数,获得Symbol
而不是它期望的,然后(显然)执行一些尝试将该值强制转换为字符串的操作。哪个失败了。 (我不确定为什么它最终调用全局Symbol
而不是影响它的东西,但是KO使用了一些相当复杂的动态代码和with
语句,所以.. 。)
这将是最近JavaScript语言更改带来的KO映射器中的错误。作为短期修复,请在映射之前重命名该属性。