只有 IE 11 有时会失去对 ajax 调用的关注 ASP.NET MVC4
Only IE 11 losing focus on ajax call sometimes ASP.NET MVC4
我正在使用 boostrap 对话框拉入一个包含数量的列表。提交表格后,打开对话框查看数量是否更新,似乎是过时的数据。我用 ajax 呼叫控制器,然后返回数据库以获取更新的信息。但是当我在控制器(在服务器端)中设置断点时,它永远不会命中。当我在开发人员工具和调试器中为调用 ajax 的函数设置断点时,它只会解决问题。我也没有看到任何控制台错误。
我对 Firefox 没有问题,只有 IE11.. 这是代码:
<script type="text/javascript">
function LocationModal() {
$("#GetLocBtn").attr("disabled", "disabled");
var partNumber = $("#PartNum").val();
var Condition = 'Z';
var urlQry;
var receiveIsChecked = document.getElementById('Receive').checked;
var src = 'removed for security';
$.ajax({
type: "GET",
url: src,
dataType: "json",
contentType: "application/json; charset=utf-8",
data: { partNumber: partNumber, CCODE: Condition },
beforeSend: function () {
},
success: function (data) {
$("#LocationModalContainer").html(data.LocationModal);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
}
});
};
问题确实是 IE 缓存了 Ajax 调用的结果。您可以通过向每个调用添加 cache: false
来防止这种行为,就像您发现的那样,或者在进行任何调用之前通过 ajaxSetup
全局设置它。
$.ajaxSetup({
cache: false
});
在 jQuery documentation 中不鼓励使用 ajaxSetup,但如果您不使用任何可能依赖于正常行为的插件并且想要快速确保 none 您自己的 ajax 调用被缓存。
就个人而言,我怀疑文档中提到的缓存设置的干扰风险有多真实,因为基本上你只是让 IE 像其他浏览器一样运行。
我正在使用 boostrap 对话框拉入一个包含数量的列表。提交表格后,打开对话框查看数量是否更新,似乎是过时的数据。我用 ajax 呼叫控制器,然后返回数据库以获取更新的信息。但是当我在控制器(在服务器端)中设置断点时,它永远不会命中。当我在开发人员工具和调试器中为调用 ajax 的函数设置断点时,它只会解决问题。我也没有看到任何控制台错误。
我对 Firefox 没有问题,只有 IE11.. 这是代码:
<script type="text/javascript">
function LocationModal() {
$("#GetLocBtn").attr("disabled", "disabled");
var partNumber = $("#PartNum").val();
var Condition = 'Z';
var urlQry;
var receiveIsChecked = document.getElementById('Receive').checked;
var src = 'removed for security';
$.ajax({
type: "GET",
url: src,
dataType: "json",
contentType: "application/json; charset=utf-8",
data: { partNumber: partNumber, CCODE: Condition },
beforeSend: function () {
},
success: function (data) {
$("#LocationModalContainer").html(data.LocationModal);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
}
});
};
问题确实是 IE 缓存了 Ajax 调用的结果。您可以通过向每个调用添加 cache: false
来防止这种行为,就像您发现的那样,或者在进行任何调用之前通过 ajaxSetup
全局设置它。
$.ajaxSetup({
cache: false
});
在 jQuery documentation 中不鼓励使用 ajaxSetup,但如果您不使用任何可能依赖于正常行为的插件并且想要快速确保 none 您自己的 ajax 调用被缓存。
就个人而言,我怀疑文档中提到的缓存设置的干扰风险有多真实,因为基本上你只是让 IE 像其他浏览器一样运行。