2014-11-17 62 views
17

我遇到了IE(11)的奇怪問題。我有簡單的jQuery代碼:當IE調試器打開時,jQuery ajax只能在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調用控制器動作,控制器中的斷點被擊中。 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 {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

這聽起來像你可能會獲得緩存響應。開發人員工具可能會啓用總是從服務器選項中刷新,導致只有在打開工具時纔會得到新的響應。

嘗試在jQuery AJAX options對象中添加cache選項,並將其值設置爲false

+0

謝謝!我有同樣的問題,直到這個解釋看起來真是奇怪。 –

+1

也適用於我。另一個原因是console.log。從代碼中移除console.log。 –

+0

是不是bizzare? –