问题是我无法检索我在安全服务器上访问的.json file
的结果,但只有在使用 ANY版本 IE 网络浏览器。
Firefox和Chrome运行良好,检索数据时未报告任何控制台错误。
由于这只是一个IE问题,我想知道检索.json file
的最佳方法,以便我可以解析收到的数据的内容。想法?
这是代码:
<!doctype html>
<html>
<head>
<title>AFD TEST</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/datejs/1.0/date.min.js"></script>
<script>
$(document).ready(function(){
$.getJSON('https://www.inquicker.com/facility/americas-family-doctors.json',
function(data){
var earliest = {};
var doctor = {};
var links = {};
$.each(data.schedules, function(i, name) {
var location = name.name.split(' - ')[0];
var dr_name = name.name.split(' - ')[1];
if (name.available_times.length) {
if (location in earliest) { // location has already been stored.
var newTime = parseAvailableDate(name.available_times[0].when);
if (newTime.isBefore(earliest[location])) {
earliest[location] = newTime;
doctor[location] = dr_name;
links[location] = name.available_times[0].url;
}
}
else {
earliest[location] = parseAvailableDate(name.available_times[0].when);
doctor[location] = dr_name;
links[location] = name.available_times[0].url;
}
}
});
displayDetailsBrentwood("Brentwood", earliest, doctor, links);
displayDetailsSmyrna("Smyrna", earliest, doctor, links);
displayDetailsSpring("Spring Hill", earliest, doctor, links);
});
});
function parseAvailableDate(dateString) {
var trimmedString = dateString.replace(/^\s\s*/, '');
var avTime=trimmedString.split(' ')[0],
ampm=trimmedString.split(' ')[1],
avDay=trimmedString.split(' ')[2];
var avDate = Date.parse("next "+avDay);
avDate.addHours(avTime.split(':')[0]).addMinutes(avTime.split(':')[1]);
if (ampm == "pm" && avTime.split(':')[0] != "12") avDate.addHours(12);
return avDate;
}
function displayDetailsBrentwood(location, earliest, doctor, links) {
$("#brentwood").append("<ul><a href='"+links[location]+"'>"+earliest[location].toString("MM/dd/yyyy h:mm tt")+"</a></ul>");
}
function displayDetailsSmyrna(location, earliest, doctor, links) {
$("#smyrna").append("<ul><a href='"+links[location]+"'>"+earliest[location].toString("MM/dd/yyyy h:mm tt")+"</a></ul>");
}
function displayDetailsSpring(location, earliest, doctor, links) {
$("#spring_hill").append("<ul><a href='"+links[location]+"'>"+earliest[location].toString("MM/dd/yyyy h:mm tt")+"</a></ul>");
}
</script>
</head>
<body>
<ul id="brentwood"></ul>
<ul id="smyrna"></ul>
<ul id="spring_hill"></ul>
</body>
</html>
答案 0 :(得分:1)
您的测试网页看起来很不错,除了字符编码缺少meta tag
。
修改后的头部:
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>AFD TEST</title>
W3C Markup Validation Service没有报告其他错误,所以让我们弄清楚你的脚本出了什么问题。
参考1: https://www.inquicker.com/facility/americas-family-doctors.json
以上.getJSON()
网址正在使用 https
,当从 IE8 地址栏直接访问该网址时,该网址会失败并显示警告信息。这在Firefox或Chrome中不会出现,它将JSON文件显示为文本。
这意味着您的脚本在与IE浏览器一起使用时也会失败,直到 JSON 文件可以像Firefox和Chrome一样通过地址栏访问。
请注意,我可以使用 http
来访问您的 JSON 文件,但仅作为下载选项。对于您的URL的所有IE版本都是如此。
话虽如此,我不确定这是否是所有IE浏览器中的标准行为,所以我寻找另一个安全的JSON文件来在IE8中进行测试。
参考2: https://raw.github.com/fhellwig/pkgconfig/master/package.json
这个新的参考网址已经过测试,在IE浏览器中没有出现任何问题,数据可以很容易地被视为文本。附注:此文件上的SSL为128位,而您的文件为256位。
底线: 由于您不需要执行此SO Question/Answers提供的注册表黑客攻击, 简易解决方案< / em> 是调整服务器设置以允许 JSON 文件类型显示在浏览器中,而不是作为下载服务。
很有可能您无法更改此服务器设置或 出于安全原因不希望 ,因此解决方案是必要的。
使用数据抓取方法
使用.ajax()
方法和Yahoo Query Language将针对任何版本的IE使用https
检索JSON文件而不会出现问题。
要查看您的脚本将收到的结果,请使用 YQL Developer Online Tool 来实现此目的。在树状视图中查看结果可以查看网页结构,这对于在脚本中创建指向该位置的直接路径非常有用。
示例:YQL using https URL with XPATH to directly access the specific data node
对于上述两个示例,请按 JSON单选按钮,然后按 TREE按钮查看结果。获得结果后,展开树中的results
节点,直到看到数据为止。
然后,要了解此 YQL STATEMENT 将如何在您的脚本中发挥作用,请在IE中查看此在线演示,该演示使用转义形式的大部分语句。转义的表单非常独特,可以通过按permalink Button
(长链接)获得。 只有当您使用非常长/复杂的XPATH时才会注意到这个YQL转义代码的独特之处,因为它实际上可能在战略位置包含单引号。
jsFiddle DEMO: americas-family-doctors.json viewed in IE on a secured connection
注意: console.log
消息在IE中最少使用,但由于它们已启用,请确保启用浏览器控制台。例如,在IE8中看到的错误是jsFiddle错误,而不是脚本的错误。使用Firefox和Chrome正确查看console.log
消息。
EXTRA:以下是演示如何解析并使用返回结果的版本。
jsFiddle DEMO: .json file and parsing of ALL Data on a secured connection for IE