在Safari中为复杂对象调用JSON.stringify错误

时间:2014-07-17 06:44:50

标签: javascript json safari momentjs dhtmlx

如上所述,这种情况发生在Safari中,而在Chrome和Firefox中,它运行良好。

我认为这是因为变成json的对象有两个属性包含一个时刻对象。我将它们更改为日期对象并传递了stringify函数。

奇怪的是,如果我尝试JSON.stringify(moment())它正在运行,所以我不知道如何调试它并找出问题所在。

以下是Safari中错误的屏幕截图:

error

修改

经过一些调试后,我注意到dhtmlxwindow onclose事件发生后会发生此错误。我在dhtmlx窗口中加载了一个局部视图,在那里我创建了这个对象,在关闭窗口之前,该对象被推入一个初始化为父视图的列表。

在关闭窗口之前,我JSON.stringify(parent.addedContracts) onclose并且在stringify事件发生后工作正常(我没有覆盖代码),列表具有相同的对象(我检查了所有属性)但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); 对同一列表失败。

修改

创建添加到列表中的对象如下:

JSON.stringify

在此行之后,dhtmlxwindow没问题,但当stringify发生关闭事件时,某些内容发生了变化,{{1}}失败了。

1 个答案:

答案 0 :(得分:1)

无论您的实施方式如何(因为我无法检查您的代码在Safari中有效但在Chrome中失败的示例),如果您认为JSON的实施在Safari中出错,​​请考虑使用JSON polyfill https://bestiejs.github.io/json3/

至于未来的问题,请考虑向我们展示一些不起作用的例子。这不仅可能揭示你所寻求的答案,如果不是,它将使我们更容易描述问题。