如上所述,这种情况发生在Safari中,而在Chrome和Firefox中,它运行良好。
我认为这是因为变成json的对象有两个属性包含一个时刻对象。我将它们更改为日期对象并传递了stringify
函数。
奇怪的是,如果我尝试JSON.stringify(moment())
它正在运行,所以我不知道如何调试它并找出问题所在。
以下是Safari中错误的屏幕截图:
修改
经过一些调试后,我注意到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}}失败了。
答案 0 :(得分:1)
无论您的实施方式如何(因为我无法检查您的代码在Safari中有效但在Chrome中失败的示例),如果您认为JSON
的实施在Safari中出错,请考虑使用JSON polyfill https://bestiejs.github.io/json3/
至于未来的问题,请考虑向我们展示一些不起作用的例子。这不仅可能揭示你所寻求的答案,如果不是,它将使我们更容易描述问题。