2016-01-25 38 views
6

Tôi nhận được JSON sau từ máy chủ:của router Lỗi Loại: Không thể chuyển đổi một giá trị Symbol thành một chuỗi

enter image description here

Và sau đó tôi đang cố gắng để ánh xạ nó sử dụng $ .map trong AJAX cuộc gọi của success, như sau:

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

và dòng cuối cùng ném ngoại lệ sau đây:

Uncaught TypeError: Cannot convert a Symbol value to a string

khi cố gắng ánh xạ thuộc tính với tên Symbol.

Từ những gì tôi đã đọc, javascript gần đây (hoặc ít nhất đã được lên kế hoạch) thêm "kiểu nguyên tố Biểu tượng mới". Sự cố này có thể liên quan không? Cách giải quyết khác là gì? Bất kỳ trợ giúp đánh giá rất nhiều.

+1

@MikeC Tôi nghĩ câu hỏi thực sự ở đây là, cách thể hiện Biểu tượng có liên quan ở đây ngay từ đầu? Nó không thể xuất phát từ kết quả 'JSON.parse()'. – Pointy

+2

Nếu 'dữ liệu' là JSON được tuần tự hóa, nó sẽ không có bất kỳ thuộc tính có tên' Ký hiệu' hoặc giá trị 'Ký hiệu' nào, vì vậy tôi không thể thấy bạn có thể chạy như thế nào. Bạn có thể tạo [MCVE] (/ help/mcve) không? –

Trả lời

8

Vấn đề ở đây là KO đang cố sử dụng hàm Symbol (vì hàm quan sát KO là hàm) vì một trong các thuộc tính trong dữ liệu của bạn được gọi là Symbol. Nhưng trên một động cơ ES2015, sẽ có chức năng toàn cầu Symbol như một phần của môi trường JavaScript. Vì vậy, KO gọi hàm đó thay vào đó, nhận được một Symbol trở lại thay vì những gì nó mong đợi, và sau đó (rõ ràng) thực hiện một số hoạt động cố gắng để ép buộc giá trị đó vào một chuỗi. Mà không thành công. (Tôi không chắc chắn lý do tại sao nó kết thúc lên kêu gọi toàn cầu Symbol chứ không phải là một cái gì đó shadowing nó, nhưng KO sử dụng một số mã năng động khá phức tạp và with báo cáo, vì vậy ...)

Đây sẽ là một lỗi trong KO mapper mang lại bởi những thay đổi ngôn ngữ JavaScript gần đây. Là bản sửa lỗi ngắn hạn, hãy đổi tên thuộc tính trước khi ánh xạ.

+0

Ahh, điều đó có ý nghĩa. Một chút của một lỗi phức tạp ở đó. –

+0

@MikeC: Big time. :-) –

Các vấn đề liên quan