0

问题是我无法检索.json file我在安全服务器上访问的结果,但这仅在使用任何版本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>
4

1 回答 1

1

您的测试网页看起来不错,只是缺少meta tag字符编码。

修改后的头部:

<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>AFD TEST</title>

W3C 标记验证服务没有报告其他错误,所以让我们找出您的脚本有什么问题。


参考1: https ://www.inquicker.com/facility/americas-family-doctors.json

上面的.getJSON()URL 正在使用https,当直接从IE8地址栏访问该 URL 时,它将失败并显示警告消息。这在将 JSON 文件显示为文本的 Firefox 或 Chrome 中不会发生。

这意味着您的脚本在与 IE 浏览器一起使用时也会失败,直到可以像 Firefox 和 Chrome 一样通过地址栏访问JSON文件。

注意 IE,我可以http用来访问您的JSON文件,但只能作为下载选项。这适用于您的 URL 的所有 IE 版本。

话虽如此,我不确定这是否是所有 IE 浏览器的标准行为,所以我寻找另一个安全的 JSON 文件在 IE8 中进行测试。

参考2: https ://raw.github.com/fhellwig/pkgconfig/master/package.json

这个新的参考 URL 经过测试,在 IE 浏览器中没有发现任何问题,数据可以很容易地以文本形式查看。旁注:此文件上的 SSL 是 128 位,而您的是 256 位。

底线:由于您不需要像SO Question/Answers提供的那样执行注册表黑客,简单的解决方案是调整您的服务器设置以允许在浏览器中显示JSON文件类型,而不是将其作为下载提供。

很有可能您无法更改此服务器设置出于安全原因不想更改,因此需要另一个解决方案。

使用数据抓取方法

与Yahoo Query Language一起使用.ajax()方法将检索用于任何版本的 IE 的 JSON 文件,而不会出现问题。https

要查看脚本将收到的结果,请为此目的使用YQL 开发人员在线工具。在树视图中查看结果可以查看网页结构,这对于在脚本中创建指向该位置的直接路径很有用。

示例:使用 https URL 的 YQL

示例:YQL 使用带有 XPATH 的 https URL 直接访问特定数据节点

对于上面的两个示例,按JSON 单选按钮,然后按TREE 按钮查看结果。获得结果后,展开results树中的节点,直到看到数据。

然后,要查看此YQL 语句将如何在您的脚本中发挥作用,请在 IE 中查看此在线演示,该演示以转义形式使用该语句的大部分。转义形式非常独特,是通过按permalink Button(长链接)获得的。只有当您使用非常长/复杂的 XPATH 时,您才会注意到这个 YQL 转义代码确实是多么独特,因为它实际上可能在战略位置包含单引号。

jsFiddle 演示:americas-family-doctors.json 在 IE 中在安全连接上查看

注意:这些console.log消息在 IE 中的使用最少,但由于它们处于打开状态,因此请确保启用浏览器控制台。例如,在 IE8 中看到的错误是 jsFiddle 错误,而不是脚本错误。使用 Firefox 和 Chromeconsole.log正确查看消息。


额外:这是一个演示如何解析和使用返回结果的版本。

jsFiddle 演示:.json 文件和 IE 安全连接上所有数据的解析

于 2012-12-12T12:14:35.143 回答