未捕获的SyntaxError:JSON输入的意外结束[}

时间:2018-03-19 07:35:09

标签: javascript php json

  

未捕获的语法错误:JSON输入的意外结束

enter image description here

帮助我收到此类错误的原因

 $('.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> 

2 个答案:

答案 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));?>"