使用$ .getJSON()我无法在任何版本的IE中收到结果。 Firefox / Chrome工作正常

时间:2012-12-12 11:41:45

标签: javascript jquery json https html-parsing

问题是我无法检索我在安全服务器上访问的.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>

1 个答案:

答案 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

示例: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