jQuery ajax 仅在 IE 调试器打开时在 IE 中有效
Posted
技术标签:
【中文标题】jQuery ajax 仅在 IE 调试器打开时在 IE 中有效【英文标题】:jQuery ajax only works in IE when the IE debugger is open 【发布时间】:2015-01-14 09:20:03 【问题描述】:我遇到了 IE (11) 的奇怪问题。我有简单的 jQuery 代码:
$("#my-radio").click(function ()
$.ajax(
url: "/my-url",
).error(function(jqXHR, textStatus, errorThrown)
$("#error-summary").text(errorThrown);
);
);
问题是这段代码在除 IE 之外的所有浏览器中都能完美运行(在我的情况下,除了 IE 11,还没有在早期版本中进行测试)但是,当我打开内置在 javascript 调试器中的 IE 以查看问题所在时- 一切开始正常。 IE 对控制器操作进行 ajax 调用,控制器中的断点被命中。 Action 什么也不返回(它的类型为void
),只是计算一些东西。我已经尝试过this thread 提供的插件解决方案,但没有用。
更新:
为了演示这个问题,我发布了简单的 MVC 应用程序here。当您单击图像时,浏览器会对此操作发出 ajax 请求:
public string Hello()
string ip = Request.ServerVariables["REMOTE_ADDR"];
string agent = Request.UserAgent;
var request = new Request
IP = ip,
Time = DateTime.UtcNow,
UserAgent = agent
;
_requestsRepository.Add(request);
int byIp = _requestsRepository.GetTotalRequestsCountByUser(ip);
int total = _requestsRepository.TotalRequests;
string message = string.Format("Hello, 0. This is your 1th request and 2th request in total.", ip, byIp, total);
return message;
使用这个 jQuery 代码:
$(document).ready(function ()
$("#click-me").click(function ()
$.ajax(
url: "/services/hello",
)
.success(function (data)
alert(data);
)
.error(function (jqXHR, textStatus, errorThrown)
$("#error-summary").text(errorThrown);
);
);
);
如您所见 - 操作返回简单的字符串,成功时发出警报。您可以在 IE 中尝试此页面。您会注意到请求的数量并没有增加,因为 实际上没有发送请求,但仍然会调用 success
事件处理程序并警告消息(这可能是一些旧的缓存消息,经过一些可能一个成功的请求,我不确定)。在任何其他浏览器中,请求的数量都会增加,因为每次单击图像时都会发送它们。如果您打开 IE 调试器 - 也会发送请求。我建议这是某种与 IE 缓存相关的问题。
【问题讨论】:
这是唯一的代码还是你有console.log的地方? @artm,这是唯一几乎准确的代码。没有console.log()
s。
我以前经历过这种情况(我认为是 IE9),页面在 IE 中为空,当我打开控制台调试器时它工作正常,结果console.log
抛出未定义的异常,因为控制台没有打开。当您打开控制台时,它可以工作。可能是另一个问题,但可能是相关的。
@VitorCanova,我还没试过提琴手。会看看...
你肯定得到了请求的缓存版本。可能值得尝试设置无缓存标头。类似于这个错误***.com/questions/9234044/…
【参考方案1】:
听起来您可能会收到缓存的响应。开发人员工具可能启用了始终从服务器刷新选项,导致您只有在工具本身打开时才能获得新的响应。
尝试在jQuery AJAX options 对象中添加cache
选项,并将其值设置为false
。
【讨论】:
谢谢!我遇到了同样的问题,在这个解释之前这看起来真的很奇怪。 也适合我。另一个原因是 console.log。从您的代码中删除 console.log。 这不是很奇怪吗? 这绝对是奇怪的,给我带来了很多时间,每次都在 chrome 中工作而不在 IE 中工作,并且在 IE 调试模式下它正在工作,解释刚刚解决了我的问题。 你在开玩笑吧!!我一直在努力解决这个问题 9 小时!!当客户端坚持使用IE。无法弄清楚为什么它在 Chrome 而不是 IE 中有效。终于偶然发现它在调试打开时有效,但在其他情况下无效。一次简短的谷歌查询后,我发现了这篇文章。谢谢!!以上是关于jQuery ajax 仅在 IE 调试器打开时在 IE 中有效的主要内容,如果未能解决你的问题,请参考以下文章
JQuery - $.ajax() - 使用 JSONP 的跨域 - 仅在 IE 8 中获取“解析器错误”(在 IE 7 中工作)