表单提交后,IE不会重新发送AJAX调用

时间:2017-07-19 16:27:35

标签: javascript c# ajax asp.net-mvc razor

我在标题中指定IE,因为我的代码在Chrome上按预期工作。基本上我有一个名为" Maintenance"用于创建,编辑和删除。表单本身包含在局部视图中(巧合地称为" _MaintenanceForm"),它有自己的GET / POST方法来提交表单。 Here is the form.抱歉,我不得不使用Pastebin而不是内联代码块 - 它们让我超越了字符限制。

请注意,表单的标识为#maintenanceForm。我只是使用jQuery函数$("#maintenanceForm").submit();而不是使用AJAX调用来提交此表单,因此我不需要将所有字段作为数据传递。 Here is my JavaScript for the Maintenance page.

我知道.submitForm点击功能被定义了两次,这是冗余代码,但我最初将它作为一个单独的函数引起了问题所以我将其匿名内联定义。一旦我在IE中使用它,我就可以专注于清理我的代码。

我的维护视图非常简单,它只是使用第一个AJAX调用渲染MaintenanceForm部分的<div class="maintenance-form"></div>Here are my controller methods.基本上我遇到的问题是,在Chrome中,在MaintenanceForm POST方法之后,调用维护GET方法重新呈现视图。重新呈现视图时,将通过AJAX调用再次调用MaintenanceForm GET和SearchTable2方法。在IE中,调用Maintenance GET方法,但不重新提交AJAX调用,因此表单不会刷新。因此,我需要手动刷新页面以查看所做的更改。

正如我所说,这完全符合我想要的Chrome浏览器而不是IE浏览器,所以我知道它必须是某种IE兼容性问题,但我无法解决这个问题。在此先感谢您的帮助,如果提供更多代码会让我知道!

1 个答案:

答案 0 :(得分:0)

@Michael Coxon是正确的,IE缓存ajax调用。尝试

$.ajaxSetup({ cache: false });

这应该允许每次调用Maintenance GET方法时刷新窗口。如果您希望这不仅仅在IE中缓存,请尝试

var ieVersion = (function() { if (new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null) { return parseFloat( RegExp.$1 ); } else { return false; } })();// IE <= 10
var isIE2 = '-ms-scroll-limit' in document.documentElement.style && '-ms-ime-align' in document.documentElement.style;// IE 11
if(ieVersion < 11 || isIE2) {
    $.ajaxSetup({ cache: false });
}

这有点像hackish,但将操作限制在任何版本的IE

参考:http://api.jquery.com/jquery.ajax/