【问题标题】:IE does not resend AJAX calls after form submit [duplicate]提交表单后 IE 不重新发送 AJAX 调用[重复]
【发布时间】:2017-12-25 01:17:46
【问题描述】:

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

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

我知道.submitForm click 函数被定义了两次,这是多余的代码,但我最初将它作为一个单独的函数,这会导致问题,所以我将其定义为匿名内联。一旦我的代码在 IE 中运行,我就可以专注于清理代码。

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

正如我所说,这完全符合我在 Chrome 中而不是 IE 中的要求,所以我知道这一定是某种 IE 兼容性问题,但我无法终生解决这个问题。提前感谢您的帮助,如果提供更多代码有帮助,请告诉我!

【问题讨论】:

  • @MichaelCoxon 我不知道要搜索“缓存”。我做了很多搜索,找不到任何东西,所以我问了我自己的问题。不过,添加$.ajaxSetup({ cache: false }); 确实有效,所以如果你想回答这个问题,我很乐意接受。感谢您的帮助!

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


【解决方案1】:

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

$.ajaxSetup({ cache: false });

这应该允许您的窗口在每次调用维护 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 });
}

这有点骇人听闻,但该操作仅限于任何版本的 IE

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

【讨论】:

  • 想解释一下否决票?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 2020-09-06
  • 2014-01-25
相关资源
最近更新 更多