2014-11-17 3 views
17

У меня возникла странная проблема с IE (11). У меня есть простой JQuery код:jQuery ajax работает только в IE, когда отладчик IE открыт

$("#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); 
     }); 
    }); 
}); 

Как вы можете видеть - действие возвращает простую строку, которая будет предупрежден об успехе. Вы можете попробовать эту страницу в IE. Вы заметите, что количество запросов не растет, потому что НЕТ-запрос на самом деле отправлен, но все же success вызывается обработчик события и сообщение оповещено (это, вероятно, какое-то старое кэшированное сообщение после некоторого, возможно, одного успешного запроса, я не уверен). В любом другом браузере количество запросов будет расти, потому что они отправляются каждый раз, когда вы нажимаете на изображение. Если вы включите отладчик IE - запросы будут отправлены тоже. Я предлагаю, что это какая-то проблема, связанная с кешем IE.

+0

Это единственный код или у вас есть console.log где-нибудь? – artm

+0

@artm, это единственный почти точный код. Нет 'console.log()' s. – Dmytro

+3

Я испытал это раньше (IE9, я думаю, это было), страница становилась пустой в IE, когда я открывал консольный отладчик, он работал нормально, оказалось, что 'console.log' выбрасывал неопределенные исключения, потому что консоль не была открыта. Когда вы открываете консоль, она работает. Может быть, еще одна проблема, но, возможно, связанная. – artm

ответ

25

Звучит так, будто вы можете получать ответы в кеш-кеш. У инструментов разработчика может быть включен параметр Всегда обновлять с сервера, что дает вам возможность получить свежий ответ только при открытии самих инструментов.

Попробуйте добавить cache объект в объекте jQuery AJAX options и установите его значение в false.

+0

Спасибо! У меня была такая же проблема, которая казалась действительно странной до этого объяснения. –

+1

работает и на меня. Другая причина - console.log. Удалите console.log из вашего кода. –

+0

разве это не bizzare? –

Смежные вопросы