0

セッションを使用してビデオ ID、タイトルなどを送信する YouTube 検索エンジンを作成しました。それぞれに一意のIDを持つボタンを作成し、どのページがajax経由で呼び出されるかをクリックすると、そのボタンの一意のIDを使用してセッションが生成されます。

JavaScript コードは次のようになります。

    <script type="text/javascript">
        function loadXMLSession(videoid, videotitle) {
            var xmlhttp;
            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) {
                    document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
                }
            }
            xmlhttp.open("GET", "GenerateDownloadSession.php?videoid=" + videoid + "&videotitle=" + videotitle, true);
            xmlhttp.send();


            //strip off spaces and embed dashes - clean urls
            var downloadtitle = videotitle;
            downloadtitle = downloadtitle.toLowerCase();
            downloadtitle = downloadtitle.replace("-"," ");//strip off dashes with spaces
            downloadtitle = downloadtitle.replace(/ +(?= )/g,'');//replace multiple spaces with one space
            downloadtitle = downloadtitle.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '');//strip off all special characters from video title
            downloadtitle = downloadtitle.replace(/ /g,"-");//replace spaces with dashes
            downloadtitle = downloadtitle.replace(/-+$|(-)+/g, '$1');//replace multiple dashes with single dash

            var url = window.location.hostname;
            url = "/development"//only for development phase
            url = url+"/download/"+downloadtitle+".html";
            window.location=url;

        }
    </script>

ダウンロード ボタンは次のようにコーディングされています。

echo "<button id=\"downloadbtn\" class=\"btn\" value = \"" . $YouTubeVideoID . "\" onclick=\"loadXMLSession(this.value,'" . $VideoContent['6'] . "')\"><img src=\"" . $HostURLRedirect . "/img/Arrow-Down-icon.png\" alt=\"download\" />&nbsp;Download</button>&nbsp;";

ajax によって呼び出される php ページには、簡単なセッション作成があります。

session_start();
$videoid = $_GET['videoid'];
$videotitle = $_GET['videotitle'];
$_SESSION['DownloadID'] = $videoid;
$_SESSION['DownloadTitle'] = $videotitle;
$_SESSION['DownloadType'] = "Download";

私が抱えている問題は、ブラウザを開いた後に初めてダウンロードボタンをクリックしたときに、うまく機能していることです。しかし、もう一度検索すると、以前のセッションの値が返されます。私は ajax を介してセッション関数を呼び出し、それに値を渡しています。また、セッション値を上書きする必要があります。ただし、この場合、値は上書きされません。どうすればこの問題を克服できますか? 助言がありますか?

4

3 に答える 3

0

xmlhttp.open("GET", "GenerateDownloadSession.php?videoid=" + videoid + "&videotitle=" + videotitle, true);
xmlhttp.send();

非同期リクエストを実行しています。つまり、JavaScript はリクエストの送信後も続行し、リクエストが完了するのを待ちません。ほとんどの場合、呼び出しによってセッション データが変更される前に、現在のページからダウンロードへのリダイレクトにヒットします。

解決策 1.) 最後のパラメーターを false に設定して、スクリプトを同期させます。

解決策 2.) 転送ロジックをonreadystatechangeコールバック関数に移動します。

サイド ノード: なぜこれに ajax を使用するのですか? 転送時にURLに追加されたパラメータを簡単に渡すことができます...?

于 2013-07-23T10:41:01.213 に答える