2016-01-25 13 views
6

Otrzymuję następujący JSON z serwera:Uncaught TypeError: nie można przekonwertować wartości Symbol na ciąg

enter image description here

a następnie próbuję mapować go za pomocą $ .map w AJAX wezwanie na success, w następujący sposób:

$.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) })); 

i ostatnia linia rzuca następujący wyjątek:

Uncaught TypeError: Cannot convert a Symbol value to a string

przy próbie zamapowania obiektu o nazwie Symbol.

Z tego, co przeczytałem, javascript ostatnio (lub przynajmniej przynajmniej planował) dodał "nowy typ pierwotnego symbolu". Czy ten problem może być powiązany? Jakie jest rozwiązanie? Każda pomoc bardzo doceniona.

+1

@MikeC Wydaje mi się, że prawdziwe pytanie brzmi: w jaki sposób zaangażowana jest tutaj instancja Symbol? Nie może pochodzić z wyniku 'JSON.parse()'. – Pointy

+2

Jeśli 'data' jest deserialized JSON, to nie będzie mieć żadnych właściwości' Symbol' lub wartości 'Symbol', więc nie widzę, jak mógłbyś na tym polegać. Czy możesz utworzyć [MCVE] (/ help/mcve)? –

Odpowiedz

8

Problem polega na tym, że KO próbuje użyć funkcji o nazwie Symbol (ponieważ obserwowalne są funkcje KO), ponieważ jedna z właściwości w twoich danych nosi nazwę Symbol. Ale w silniku ES2015 będzie globalna funkcja Symbol jako część środowiska JavaScript. Więc KO nazywa tę funkcję zamiast tego, pobiera z powrotem Symbol zamiast tego, czego oczekuje, a następnie (podobno) wykonuje operację, która próbuje przymusić tę wartość do łańcucha znaków. Co nie powiedzie się. (Nie jestem pewien dlaczego kończy się wywołaniem globalnego Symbol zamiast czegoś shadowing, ale KO wykorzystuje pewne dość skomplikowany i dynamiczny kod i with sprawozdań, tak ...)

Byłby to błąd w Mapowanie KO wywołane nowymi zmianami języka JavaScript. W przypadku poprawki krótkoterminowej zmień nazwę właściwości przed jej mapowaniem.

+0

Ahh, to ma sens. Trochę podstępnego błędu. –

+0

@MikeC: Wielki czas. :-) –

Powiązane problemy