2

いくつかのタブで mvc アプリケーションを作成していました。IIS 7 でホストされている場合、ホーム ページには、AJAX を介してコンテンツをロードする JavaScript 関数をトリガーするリンクがあることに注意してください。

最初のページの読み込みでは機能しませんが、他のタブにアクセスしてホームページに戻ってリンクをクリックすると、完全に機能します。誰かがこれの理由またはそれを回避する方法を教えてもらえますか?

ローディングコード

function GetLabels(project) {
    var xmlHttp;
    if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
    else {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
            document.getElementById("light").innerHTML = xmlHttp.responseText;
        }
    }
    xmlHttp.open("GET", "/Home/GetLabels?project="+project, true);
    xmlHttp.send();
    document.getElementById('light').style.display = 'block';
    document.getElementById('fade').style.display = 'block';
    document.getElementById("light").innerHTML = 
       "<img src='Content/load.gif' alt='Please wait' />";
}

それを引き起こすリンク

Click <a href="javascript:void(0)" onclick="GetLabels('A')">here</a>
4

1 に答える 1

3

次のようなURLをハードコーディングしないでください。

xmlHttp.open("GET", "/Home/GetLabels?project="+project, true);

それらを生成するには、常にURLヘルパーを使用する必要があります。

xmlHttp.open("GET", "@Url.Action("GetLabels", "Home")?project=" + encodeURIComponent(project), true);

これで、Visual Studioの組み込みサーバーでホストしているかIISでホストしているかに関係なく、AJAX要求が機能します。コードがIISで機能しない理由は、IISでは、アプリケーションがURLに含める必要のある仮想ディレクトリでホストされているためです。したがって、正しいURLはそうではありません/home/getlabelsが、/appname/home/getlabelsこれはURLヘルパーが考慮に入れるものです。

また、GETリクエストを使用しているため、Webブラウザが結果をキャッシュし、サーバーにリクエストを再度送信しない場合があります。これを回避するには、ランダムなクエリ文字列パラメータをURLに追加するか、POST動詞を使用する必要があります。

于 2012-06-27T15:31:57.217 に答える