2

我正在编写一个带有几个选项卡的 mvc 应用程序。我注意到当托管在 IIS 7 上时,主页有一个链接触发 JavaScript 函数以通过 AJAX 加载内容。

它在第一页加载时不起作用,但是当我访问其他一些选项卡并返回主页并单击链接时,它可以完美运行。有人能告诉我这是什么原因或如何避免吗?

加载代码

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

您不应该像这样对网址进行硬编码:

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/getlabelsurl helper 考虑的。

此外,由于您使用的是 GET 请求,因此 Web 浏览器可能会缓存结果并且永远不会再次向服务器发送请求。为避免这种情况,您应该将随机查询字符串参数附加到 url 或使用 POST 动词。

于 2012-06-27T15:31:57.217 回答