javascript - 在 IIS7 中托管 MVC3 项目时,为什么我的 AJAX 加载第一次失败?

标签 javascript ajax asp.net-mvc asp.net-mvc-3 iis-7

我正在编写一个带有几个选项卡的 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>

最佳答案

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

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 请求,网络浏览器可能会缓存结果,并且不再向服务器发送请求。为了避免这种情况,您应该将随机查询字符串参数附加到 URL 或使用 POST 谓词。

关于javascript - 在 IIS7 中托管 MVC3 项目时,为什么我的 AJAX 加载第一次失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11229196/

相关文章:

ajax - 使用 AJAX 时清除 IE 缓存,而不使用缓存清除查询字符串,但使用 http 响应 header

javascript - 成功更新数据后再次进行ajax POST调用

asp.net-mvc - 在自定义 ASP MVC 路由中为 URL 起别名

javascript - 如何在 Gitlab CI 中缩小 Javascript 代码?

javascript - 根据查询更新 Cloud Firestore 中的文档

jquery - Fancybox 发出不需要的同步请求?

javascript - 输入隐藏控件不会在回发之间保留 his 值

javascript - 如何从 Javascript 使用 Entity Framework 更新数据库

javascript - Velocity js 翻译问题

javascript - 使用 javascript 在 Web 应用程序中键盘卡住