0

問題は、セキュリティで保護されたサーバーでアクセスしているの結果を取得できないことですが、これは、 IEWebブラウザーの任意のバージョン.json file使用している場合にのみ発生します。

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テストWebページは、文字エンコードが欠落していることを除けば、見栄えがします。

改訂されたヘッドセクション:

<!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()URLはを使用しており、そのURLにIE8httpsアドレスバーから直接アクセスすると、警告メッセージが表示されて失敗します。これは、JSONファイルをテキストとして表示するFirefoxまたはChromeでは発生しません。

つまり、IEブラウザで使用すると、FirefoxやChromeと同じようにアドレスバーからJSONファイルにアクセスできるようになるまで、スクリプトも失敗します。

IEでは、 JSONhttpファイルへのアクセスに使用できますが、ダウンロードオプションとしてのみ使用できます。これは、URLのすべてのIEバージョンに当てはまります。

そうは言っても、これがすべてのIEブラウザーの標準的な動作であるかどうかはわかりませんでした。そこで、IE8でテストする別の安全なJSONファイルを探しました。

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

この新しい参照URLはテスト済みであり、IEブラウザーで問題は発生していません。データは、テキストとして簡単に表示できます。補足:このファイルのSSLは128ビットでしたが、あなたのSSLは256ビットでした。

結論:このSO Question / Answersが提供するようなレジストリハックを実行する必要がないため、簡単な解決策は、サーバー設定を調整して、ダウンロードとして提供するのではなく、 JSONファイルタイプがブラウザーに表示されるようにすることです。

このサーバー設定を変更できない、セキュリティ上の理由で変更したくない可能性が高いため、別の解決策が必要です。

データスクレイピング方法を使用する

メソッドをYahooQueryLanguage.ajax()と一緒に使用すると、IEの任意のバージョンで使用されているJSONファイルが問題なく取得されます。https

スクリプトが結果として受け取るものを表示するには、この目的でYQL DeveloperOnlineToolを使用します。ツリービューで結果を確認すると、Webページの構造を確認できます。これは、スクリプト内でその場所への直接パスを作成するのに役立ちます。

例:httpsURLを使用したYQL

例:特定のデータノードに直接アクセスするためにXPATHでhttpsURLを使用するYQL

上記の両方の例で、JSONラジオボタンを押してからTREEボタンを押して結果を表示します。results結果が得られたら、データが表示されるまでツリー内のノードを展開します。

次に、このYQLステートメントがスクリプトでどのように役割を果たすかを確認するには、そのステートメントのほとんどをエスケープされた形式で使用するIEのこのオンラインデモを表示します。permalink Buttonエスケープされたフォームは非常にユニークで、 (長いリンク)を押すことによって取得されました。非常に長い/複雑なXPATHを使用する場合にのみ、このYQLエスケープコードが実際にどれほどユニークであるかに気付くでしょう。これは、戦略的な場所で実際に一重引用符が含まれている可能性があるためです。

jsFiddleデモ:安全な接続でIEで表示されたamericas-family-doctors.json

注:メッセージはIEで最小限の使用になりますが、console.logメッセージがオンになっているため、ブラウザーコンソールを有効にしてください。たとえば、IE8で見られるエラーは、スクリプトのエラーではなく、jsFiddleエラーです。FirefoxとChromeを使用して、console.logメッセージを正しく表示します。


追加:これは、返された結果を解析して使用する方法を示すバージョンです。

jsFiddleデモ:.jsonファイルとIEの安全な接続でのすべてのデータの解析

于 2012-12-12T12:14:35.143 に答える