Câu hỏi jQuery ajax chỉ hoạt động trong IE khi trình gỡ rối IE đang mở


Tôi đã gặp phải vấn đề lạ với IE (11). Tôi có mã jQuery đơn giản:

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

Điều này là mã này hoạt động hoàn hảo trong tất cả các trình duyệt ngoại trừ IE (trong trường hợp của tôi ngoại trừ IE 11, chưa thử nghiệm trong các phiên bản cũ hơn) 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 chủ đề này nhưng nó không hữu ích.

CẬP NHẬT:

Để chứng minh vấn đề tôi đã xuất bản ứng dụng MVC đơn giản đây. Khi bạn nhấp vào hình ảnh, trình duyệt sẽ thực hiện yêu cầu ajax đối với 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ể thấy - hành động trả về chuỗi đơn giản được cảnh báo về 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 success xử lý sự kiện được gọi và thông điệp được cảnh báo (đây có thể là một số thông điệp được lưu trong bộ nhớ cache cũ sau khi một số có thể là một yêu cầu thành công, tôi không chắc chắn). 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.


17
2017-11-17 12:48


gốc


Đây có phải là mã duy nhất hoặc bạn có console.log ở đâu đó? - artm
@artm, đó là mã chỉ gần như chính xác. Không console.log()S. - Dmytro
Tôi đã trải nghiệm điều này trước đây (IE9 tôi nghĩ rằng nó đã được), trang đã được đưa lên trống trong IE, khi tôi mở trình gỡ lỗi giao diện điều khiển nó đã làm việc tốt, bật ra console.log đã 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
@VitorCanova, tôi đã không thử fidler. Sẽ có một cái nhìn ... - Dmytro
Bạn chắc chắn đang nhận được phiên bản được lưu trong bộ nhớ cache của yêu cầu. Nó có thể là giá trị cố gắng thiết lập các tiêu đề không có bộ nhớ cache. Tương tự như lỗi này stackoverflow.com/questions/9234044/… - Anthony Roberts


Các câu trả lời:


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ụ dành cho nhà phát triển có thể có Luôn làm mới từ máy chủ đã bật tùy chọn, 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 cache tùy chọn trong Tùy chọn jQuery AJAX và đặt giá trị của nó thành false.


26
2017-11-18 00:00



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. - Michael Winther
cũng làm việc cho tôi. Một lý do khác là console.log. Xóa console.log khỏi mã của bạn. - arpan desai
không phải là bizzare? - Kishor Pawar
đây là tuyệt đối bizzare, gây ra cho tôi rất nhiều thời gian, mỗi lần làm việc trong chrome và không hoạt động trong IE, và trong chế độ gỡ lỗi IE nó đã được làm việc, giải thích chỉ giải quyết vấn đề của tôi. - Forhad
Bạn có KIDDING ME !! Tôi đã cố gắng giải quyết điều này cho NINE HOURS !! Khách hàng Đặng nhấn mạnh vào việc sử dụng IE. KHÔNG thể tìm ra lý do tại sao nó hoạt động trong Chrome nhưng không phải là IE. CUỐI CÙNG vấp ngã khi thực tế là nó làm việc khi gỡ lỗi được mở, nhưng không phải khác. Sau khi truy vấn google ngắn sau đó và tôi đã tìm thấy bài đăng này. CẢM ƠN BẠN!! - Casey Crookston