2014-07-17 20 views
8

Như đã nêu điều này xảy ra trong Safari khi Chrome và Firefox hoạt động tốt.Gọi JSON.stringify lỗi cho đối tượng phức tạp trong Safari

Tôi nghĩ rằng đó là vì đối tượng được chuyển thành json có hai thuộc tính chứa đối tượng thời điểm. Tôi đã thay đổi chúng thành đối tượng ngày tháng và hàm stringify được chuyển.

Điều lạ lùng là nếu tôi cố gắng làm JSON.stringify(moment()) nó đang hoạt động, vì vậy tôi không chắc chắn làm thế nào để gỡ lỗi này và tìm nơi mà vấn đề được.

Đây là một ảnh chụp màn hình của lỗi trong Safari:

error

Edit:

Sau khi một số lỗi tôi nhận thấy rằng lỗi này xảy ra sau khi một sự kiện dhtmlxwindow onclose. Tôi tải một phần xem trong một cửa sổ dhtmlx và trong đó tôi tạo ra đối tượng này được đẩy vào một danh sách intialized vào khung nhìn cha mẹ trước khi đóng cửa sổ.

Trước khi tôi đóng cửa sổ tôi làm JSON.stringify(parent.addedContracts) và nó làm việc tốt sau sự kiện onclose xảy ra (tôi không có mã override có) trong danh sách có cùng đối tượng (Tôi đã kiểm tra tất cả các tài sản) nhưng stringify không cho cùng danh sách.

Edit:

Creation của đối tượng đó của được thêm vào danh sách đi như thế này:

var contractStartDate = moment(contractStartDateCalendar.getDate(true), "L"); 
var contractEndDate = moment(contractEndDateCalendar.getDate(true), "L"); 

var newContract = { 
    Id     : uniqueId, 
    FunctionDesc  : $("#contractFunction").val(), 
    ContractHours  : $("#contractHours").val(), 
    AdditionalCostFactor: $("#contractAdditionalCostFactor").val().replace(',', '.'), 
    VacationFormula  : contractHolidayCostFactor, 
    StartDate   : contractStartDate, 
    EndDate    : contractEndDate, 
    Notes    : Encoder.htmlEncode(tinyMCE.get('contractNotes').getContent()), 
    DaysOfWeek   : workingDaysString, 
    PlusMinus   : $("#contractTypeDropdown option:selected").data("plusminus"), 
    SalaryCalculation : $("#contractTypeDropdown option:selected").data("salarycalculation"), 
    ContractTypeId  : $("#contractTypeDropdown").val(), 
    ContractTypeName : $("#contractTypeDropdown option:selected").text(), 
    UploadedImageUrl : uploadedSignedContractUrl 
}; 

parent.addedContracts.push(newContract); 

Sau dòng này JSON.stringify là ok, nhưng khi sự kiện gần xảy ra trên dhtmlxwindow một cái gì đó thay đổi và stringify không thành công.

+0

Bạn có thể thử xâu chuỗi các khoảnh khắc trong đối tượng trước khi xâu chuỗi nó? – springbo

+0

Điều đó sẽ sửa chữa nó nhưng tôi không muốn vượt qua tất cả các đối tượng và tài sản của họ trước khi lưu nó bởi vì tôi biết nó sẽ làm việc và điều đó sẽ chỉ làm chậm quá trình lưu. – Aleks

+0

Chỉ để đề cập đến những điều cơ bản, bạn đang thử phiên bản Safari nào? –

Trả lời

1

Bất kể thực hiện của bạn (và kể từ khi tôi không thể kiểm tra một ví dụ về mã của bạn mà làm việc trong Safari nhưng thất bại trong Chrome), nếu bạn nghĩ rằng việc thực hiện JSON có lỗi trong Safari, hãy xem xét sử dụng một JSON polyfill https://bestiejs.github.io/json3/

Đối với các câu hỏi trong tương lai, vui lòng xem xét hiển thị cho chúng tôi các ví dụ tối thiểu về những gì không hoạt động. Điều này không chỉ có thể tiết lộ câu trả lời bạn đang tìm kiếm, nếu nó không phải là nó sẽ làm cho nó dễ dàng hơn cho chúng tôi để mô tả vấn đề.

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