未捕获的语法错误:JSON输入的意外结束
帮助我收到此类错误的原因
$('.view-profile').on('click', function(e) {
e.preventDefault();
var id = $(this).data('id');
var str = $(this).data('citizens');
var citizensArray = JSON.parse(str);
alert(citizensArray[0].id);
});
html& PHP
<button type="button" class="btn btn-success btn-sm view-profile" data-
citizens="<?php echo json_encode($citizens);?>" data-id="<?php echo
$citizen['id'];?>"><i class="fa fa-fw fa-user-o"></i> Profile</button>
答案 0 :(得分:4)
将date1 = '19/03/2018 20:30'; // date selected by bootstrap material datepicker
date2 = '19/03/2018 22:40';
date1Arr = date1.split('/'); // Here, date is converted to array so that we can change format of date time which is accetable by Javascript
date1YearAndtime = date1Arr[2].split(" ");
newdate1 = date1YearAndtime[0]+"/"+date1Arr[1]+"/"+date1Arr[0]+" "+date1YearAndtime[1]; // Combine array values to make it date format yyyy/mm/dd hour:minutes
date2Arr = date2.split('/');
date2YearAndtime = date2Arr[2].split(" ");
newdate2 = date2YearAndtime[0]+"/"+date2Arr[1]+"/"+date2Arr[0]+" "+date2YearAndtime[1];
var diff = Math.abs(new Date(newdate1) - new Date(newdate2)); // it finds difference between two dates in milliseconds
var minutes = Math.floor((diff/1000)/60); // Here, milliseconds is converted to seconds when divided by 1000 and then converted to minutes when divided by 60
alert(minutes);
换成单引号,即data-citizens
,因为data-citizen='<?php echo json_encode($citizens);?>'
的存在是JSON字符串会突然终止属性值。
并且,您不需要将"
与.data()
一起使用,如果数据是有效的JSON格式,则该方法将返回JavaScript对象。
当data属性是一个对象(以'{'开头)或数组(以'['开头)时,
JSON.parse()
用于解析字符串;它必须遵循有效的JSON语法,包括引用的属性名称。如果该值不能作为JavaScript值进行解析,则将其保留为字符串。
如果错误以上,请使用jQuery.parseJSON
和有效的JSON结果。
所以只需使用
JSON.parse()
var citizensArray = str;
$('.view-profile').on('click', function(e) {
e.preventDefault();
var str = $(this).data('citizens');
console.log(str);
});
答案 1 :(得分:1)
在将JSON添加到HTML属性之前,请确保对其进行编码。
data-citizens="<?php echo htmlspecialchars(json_encode($citizens));?>"