【发布时间】:2014-09-17 13:43:31
【问题描述】:
我有一个混合了 MVC 控制器操作调用的以下 javascript 函数:
var loadPartialChapterAfterAnswer = function () {
$.ajax({
url: '@Url.Action("IsAuthenticated", "Story")',
type: "POST",
success: function(data) {
var isAuthenticated = data;
if (isAuthenticated) {
if ('@Model.IsPersonality' == 'True') {
loadPartialChapter();
} else {
$("#chapterContainer").load('@Url.Action("GetNextQuestion", "Story")' + '?storyId=' + '@Model.Id', function () {
selectedCounter = 0;
showOnlyOneQuestion();
});
}
} else {
window.location.href = '@Url.Action("RedirectToHomeRoute", "Home")';
}
},
error: function() {
alert("Error");
}
});
};
每次我在页面(视图)上选择一个复选框时,都会调用此函数。代码在除 IE 之外的所有浏览器中都运行良好。在 IE 中,ajax url @Url.Action("IsAuthenticated", "Story") 每次都被调用 OK,但其他控制器操作 '@Url.Action("GetNextQuestion", "Story")' + '?storyId=' + '@Model.Id' 仅在 IE 的浏览器调试器打开时才被调用。当 IE 的调试器窗口关闭时,永远不会调用第二个 MVC 操作。
非常感谢任何帮助!
解决方案
我在页面开头添加了这段代码:
<script>
$.ajaxSetup({
cache: false
});
</script>
现在它可以工作了!感谢大家的努力。
【问题讨论】:
-
顺便说一句:'@Url.Action("GetNextQuestion", "Story")' + '?storyId=' + '@Model.Id' 和 '@Url.Action( "GetNextQuestion", "Story")' + '?storyId=@Model.Id'
-
IE 的问题是将几乎所有内容都存储在缓存中。在您的 ajax 中,您必须指定“cache: false”属性,以便请求具有时间戳,因此 IE 现在每次都会执行来自控制器的操作
-
@AlexArt - 是的,我知道,但这没什么大不了的......
-
@JorgeF - cache: false 不幸的是没有帮助......
-
On stackoverflow.com/questions/15949819/… ppl 说除非调试器打开,否则 IE 倾向于在 console.log() (和其他控制台方法)上崩溃。我尝试不包含包含控制台、console.log() 的脚本,但没有帮助。
标签: javascript jquery asp.net-mvc internet-explorer