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