0

私は html や js などに比較的慣れていません。これまで、「封じ込められた」環境で Web サイトに取り組んでいました。自分のリソースにしかアクセスできませんでした。

私の大学では、クラスと日付の入力を使用して講義スケジュールをオンラインで提供しています。PDFは常に次の形式で保存されます../onxx-yyyy-ww.pdf

一度クラスを要求し、それを Cookie に保存する Web サイトを作成したいと考えています。それ以降は、Web サイトにアクセスするたびに、現在のスケジュールで PDF ファイルに転送されます。これは、私が何も知らない AJAX と呼ばれるもので実現できることがわかりました。これは私がどこまで来たかです:

js 部分 (Nick Baicoianu による getWeek() を除く):

window.onload = function(){
            checkCookie();
        }

        function checkCookie(){
            if(document.cookie!=''){
                forwarding();
            }
        }

        function forwarding(){
            alert('Forwarding...');
            if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
            }
            else{// code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }

            xmlhttp.onreadystatechange=function(){
              if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                    alert(xmlhttp.responseText);
                }
              }

            var todayDate = new Date();
            var weekDate = todayDate.getWeek();
            a = document.cookie;
            cookiename = a.substr(0,a.search('='));
            cookiewert = a.substr(a.search('=')+1,a.search(';'));
            if(cookiewert == '')
            {cookiewert = a.substr(a.search('=')+1,a.length);} 
            if(cookiewert<10){
            cookiewert= "0" + cookiewert;
            }

            for (var w=weekDate;w>0;w--){
            xmlhttp.open("GET","http://pollux.dhbw-mosbach.de/cmos_extern_kurs_ext/"+cookiewert+"-"+todayDate.getFullYear()+"-"+w+".pdf",true);
            xmlhttp.send();
            }
        }

        function run(){
            var d = new Date();
            d = new Date(d.getTime() +1000*60*60*24*365*5); // 5 Jahre Cookie

            document.cookie = 'class='+document.getElementById('class').value+'; expires='+d.toGMTString()+';'; 

            forwarding();
        }

html:

<body>
    <select id="class">
        <option value="on09">on09</option>
        <option value="on10">on10</option>
        <option value="on11a">on11a</option>
        <option value="on11b">on11b</option>
        <option value="on12">on12</option>
    </select> 
    <button onclick="run()">Weiter</button>
</body>

転送アラートが表示されますが、それ以上何も起こらず、何もわかりません。私の問題以外に私のコードへのフィードバックがあれば、喜んで受け入れます。

ランチに行っているので、返信に時間がかかります。助けてくれてありがとう!

編集:

要求されたファイルが存在する場合に情報を取得できるようになるまで、jQuery ですべてが機能しました。何も起こりません。私のコードにエラーがあるかもしれませんが、コンソールには何も表示されません。また、jQuery API get() http://api.jquery.com/jQuery.get/で見つけましたか

ブラウザーのセキュリティ制限により、ほとんどの "Ajax" 要求は同一オリジン ポリシーの対象となります。要求は、別のドメイン、サブドメイン、またはプロトコルからデータを正常に取得できません。

また、これは私の新しい forwarding() です:

function forwarding(){
            alert('Forwarding...');

            var todayDate = new Date();
            var weekDate = todayDate.getWeek();

            a = document.cookie;
            cookiename = a.substr(0,a.search('='));
            cookiewert = a.substr(a.search('=')+1,a.search(';'));
            if(cookiewert == '')
            {cookiewert = a.substr(a.search('=')+1,a.length);} 
            alert('http://pollux.dhbw-mosbach.de/cmos_extern_kurs_ext/'+cookiewert+'-'+todayDate.getFullYear()+'-'+singleWeek(weekDate)+'.pdf');

            for (var w=weekDate;w>0;w--){
                $.ajax({
                    type: 'HEAD',
                    url: 'http://pollux.dhbw-mosbach.de/cmos_extern_kurs_ext/'+cookiewert+'-'+todayDate.getFullYear()+'-'+singleWeek(weekDate)+'.pdf',
                    crossDomain: true,

                    success: function () {
                        document.location = "http://pollux.dhbw-mosbach.de/cmos_extern_kurs_ext/"+cookiewert+"-"+todayDate.getFullYear()+"-"+singleWeek(weekDate)+".pdf";
                    },

                    error: function () {
                        alert("Unable to connect to secure checkout.");//TODO: remove when success is working
                        return false;
                    }
                });
            }

            function singleWeek(weekDate){
                if (weekDate<10){
                    weekDate = "0"+weekDate;
                }
            return weekDate;
            }
        }

私が望むのは、ファイルが存在する場合にフィードバックを提供するメソッド/関数だけです。この場合、ステータスは成功またはエラーを返す必要があります。それがうまくいくなら、私はそれで働くことができました...私は自分の間違いを見ません

4

2 に答える 2

0

しかし、答えを得るときはそれだけです:アラート!
あなたの回答はhtml形式のテキストですか?ユーザーをリダイレクトしたいですか、それともページにコンテンツを表示したいですか?
基本的に、あなたはほとんどあなたの応答で何かをします。たとえば、divのコンテンツを置き換えます

document.getElementById("mydiv").innerHTML = xmlhttp.responseText

または、ドキュメントの場所を変更するか(リダイレクト用)、PDFへのリンクを作成することができます(ダウンロード可能なオブジェクトとしてブラウザプラグインを使用してPDFを「表示」する方法がわかりません。または、ライブラリがPDFからHTMLを自動生成してこれを提供しますPDFファイルの代わりに?)

于 2013-02-28T11:04:28.243 に答える
0

同一オリジン ポリシーのため、これを JavaScript で実現することは不可能のようです。

于 2013-07-10T15:09:44.630 に答える