当IE调试器打开时,jQuery ajax只能在IE中运行

时间:2014-11-17 12:48:25

标签: jquery ajax internet-explorer

我遇到了IE(11)的奇怪问题。我有简单的jQuery代码:

$("#my-radio").click(function () {
     $.ajax({
        url: "/my-url",
    }).error(function(jqXHR, textStatus, errorThrown) {
        $("#error-summary").text(errorThrown);
    });
});

问题是这个代码在除IE以外的所有浏览器中都能完美运行(在我的情况下除了IE 11,还没有在早期版本中测试)但是,当我打开IE内置的javascript调试器看看有什么不对 - 一切都开始工作正常。 IE对控制器动作进行ajax调用,控制器中的断点被命中。动作不返回任何内容(类型为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 {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);
        });
    });
});

正如您所看到的 - action返回简单的字符串,该字符串会在成功时发出警报。您可以在IE中尝试此页面。您会注意到请求数量没有增加,因为实际上没有发送请求但仍调用success事件处理程序并且警告消息(这可能是一些旧的缓存消息之后一些可能成功的请求,我不确定)。在任何其他浏览器中,请求数量将增加,因为每次单击图像时都会发送这些请求。如果你打开IE调试器 - 也会发送请求。我建议这是某种与IE缓存相关的问题。

1 个答案:

答案 0 :(得分:28)

听起来你可能会得到缓存的回复。开发人员工具可能启用了始终从服务器刷新选项,这使您只能在打开工具本身时获得新的响应。

尝试在jQuery AJAX options对象中添加cache选项,并将其值设置为false