我在我的 HTML 中应用于数据属性的一些 JSON 数据上遇到了一些奇怪的行为,我使用修复程序让它工作,但我不确定为什么需要应用此修复程序。我正在使用 jquery-1.9.0
案例 1 - 没有工作$.parseJSON()
http://reelfilmlocations.co.uk/browse-locations/
在此页面上,我将数据属性应用于图像下方的图标,我将使用地图图标作为示例
html 看起来像这样:
<img
src="/images/Icons/map circle.fw.png" width="24" height="24"
class="icon mapLink"
data-location='{
"id":"<?php echo($row_rs_locations['id_loc']);?>",
"slug":"<?php echo($row_rs_locations['slug_loc']);?>",
"page":"<?php echo($cur_page);?>",
"lat":"<?php echo($row_rs_locations['maplat_loc']);?>",
"lng":"<?php echo($row_rs_locations['maplong_loc']);?>",
"pinType":"loc",
"name":"<?php echo($row_rs_locations['name_loc']);?>",
"linkType":"list"
}'
/>
JSON对象:
{ "id":"5", "slug":"boston-manor-house-and-park", "page":"1", "lat":"51.492341", "lng":"-0.3186064000000215", "pinType":"loc", "name":"Boston Manor House and Park", "linkType":"list" }
我检查了http://jsonlint.com/这确实是有效的 json
单击地图图标时,我要运行以下 jquery
$('.wrapper').delegate('.mapLink','click',function() {
var myData = $(this).data('location');
console.log(myData); // correctly logs json object
$('.middle_section').hide();
$('#mapContent').show();
createMarkerWithInfo(myData, true);
})
一切都按预期工作数据位置元素以 json 格式读入,我可以将其用作 json 对象而无需执行任何其他操作
案例2——需要使用$.parseJSON()
http://2012.reelfilmlocations.co.uk/browse-locations/
这几乎是上述案例的复制品(此版本将针对移动设备进行优化)
除了单击事件检索数据位置元素之外,代码几乎相同,但作为文本而不是 json 对象,我需要先使用它来解析它,$.parseJSON(myData)
然后才能使用它。
$('.wrapper').delegate('.mapLink','click',function() {
//console.log('mapLink clicked');
var myData = $(this).data('location');
console.log(myData);// outputs text not a json object
myData = $.parseJSON(myData) //parse the data
console.log(myData);// outputs a JSON object
$('.middle_section').hide();
$('#mapContent').show();
createMarkerWithInfo(myData, true);
})
我不明白为什么在 effext 中完全相同的两个脚本中,我必须使用 $.parseJSON 而另一个我不使用,这对我来说似乎很奇怪,谁能启发我?