2014-11-17 15 views
17

Tôi đã gặp sự cố lạ với IE (11). Tôi có mã jQuery đơn giản:jQuery ajax chỉ hoạt động trong IE khi trình gỡ lỗi IE đang mở

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

Cái này là mã này hoạt động hoàn hảo trong tất cả các trình duyệt trừ IE (trong trường hợp của tôi, ngoại trừ IE 11, đã không kiểm tra trong các phiên bản trước đó chưa) NHƯNG, khi tôi mở IE được xây dựng trong trình gỡ lỗi javascript để xem có gì sai - mọi thứ bắt đầu hoạt động tốt. IE làm cho cuộc gọi ajax đến hành động điều khiển, breakpoint trong bộ điều khiển được nhấn. Hành động trả về không có gì (nó thuộc loại void), chỉ đếm một số thứ. Tôi đã thử giải pháp plugin được cung cấp trong this thread nhưng không hữu ích.

CẬP NHẬT:

Để chứng minh vấn đề tôi đã xuất bản đơn giản ứng dụng MVC here. Khi bạn nhấn chuột vào hình ảnh, trình duyệt làm cho yêu cầu ajax để hành động này:

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; 
} 

với mã jQuery này:

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

Như bạn có thể nhìn thấy - hành động trả về chuỗi đơn giản mà được cảnh báo về sự thành công. Bạn có thể thử trang này trong IE. Bạn sẽ nhận thấy rằng số lượng yêu cầu không tăng lên, bởi vì KHÔNG yêu cầu nào thực sự được gửi nhưng vẫn xử lý sự kiện success và thông báo được cảnh báo (có thể là một số thông báo được lưu trong bộ nhớ cache cũ sau một số yêu cầu thành công) không chắc). Trong bất kỳ trình duyệt nào khác, số lượng yêu cầu sẽ tăng lên, bởi vì chúng được gửi mỗi khi bạn nhấp vào hình ảnh. Nếu bạn bật trình gỡ lỗi IE - các yêu cầu cũng sẽ được gửi đi. Tôi đề nghị đây là một số loại vấn đề liên quan đến bộ nhớ cache của IE.

+0

Đây có phải là mã duy nhất hoặc bạn có console.log ở đâu đó không? – artm

+0

@artm, đó là mã gần như chính xác. Không có 'console.log()' s. – Dmytro

+3

Tôi đã trải nghiệm điều này trước đây (IE9 tôi nghĩ là vậy), trang đã bị trống trong IE, khi tôi mở trình gỡ lỗi console, nó hoạt động tốt, bật ra 'console.log' là ném các ngoại lệ không xác định vì bàn điều khiển không mở. Khi bạn mở giao diện điều khiển nó hoạt động. Có thể là một vấn đề khác nhưng có thể liên quan. – artm

Trả lời

25

Có vẻ như bạn có thể nhận được phản hồi được lưu trong bộ nhớ cache. Các công cụ nhà phát triển có thể bật tùy chọn Luôn làm mới từ máy chủ, khiến bạn chỉ nhận được phản hồi mới khi các công cụ được mở.

Thử thêm tùy chọn cache trong đối tượng jQuery AJAX options và đặt giá trị của nó là false.

+0

Cảm ơn bạn! Tôi đã có cùng một vấn đề, mà dường như thực sự kỳ lạ cho đến khi giải thích này. –

+1

cũng hoạt động cho tôi. Một lý do khác là console.log. Xóa console.log khỏi mã của bạn. –

+0

không phải là bizzare? –

Các vấn đề liên quan