我遇到了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调用,控制器中的断点被命中。动作不返回任何内容(它的类型为void),仅计算一些内容。我已经尝试过此线程中提供的插件解决方案,但没有用。
void
更新:
为了演示这个问题,我在这里发布了简单的MVC应用程序。当您单击图像时,浏览器会对此操作发出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 {1}th request and {2}th 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缓存相关的问题。
success
听起来您可能正在获取缓存的响应。开发人员工具可能启用了“ 从服务器始终刷新” 选项,从而使您仅在打开工具本身时获得新的响应。
尝试cache在jQuery AJAX options对象中添加选项,并将其值设置为false。
cache
false