2013-07-22 33 views
9

Tóm tắt các vấn đềjquery ajax lỗi ngẫu nhiên trong Chrome chỉ

Sau khi đăng nhập với Chrome thông qua hình thức xác thực. Trang đích dưới dạng returnUrl sẽ báo lỗi ajax jQuery của tôi mà không cần nhấn máy chủ. status code = 0message = "error". (Rất hữu ích). Đã thử Firefox và không thể tái tạo sự cố, tôi bắt đầu nghĩ Chrome là vấn đề. Xóa bộ đệm, đóng và mở lại không khắc phục được. Bài viết gần nhất tôi có thể tìm thấy là cái này. jQuery Ajax - Status Code 0? Tuy nhiên, URL là tương đối, /Test

Một SO Bài chi tiết: jquery ajax problem in chrome

dài mô tả

Tôi nhận được một lỗi với jQuery ajax. Dường như ngay sau khi đăng nhập với xác thực biểu mẫu; trang đích (returnUrl), sẽ xảy ra lỗi JS. Sau đó, sau khi làm mới trang (F5), tập lệnh sẽ hoạt động (chủ yếu). Ngay cả khi không sử dụng F5, việc điều hướng đến cùng một trang bằng liên kết sẽ cho phép JS hoạt động (chủ yếu). Vì vậy, ngay sau khi đăng nhập là con đường thử nghiệm chính của tôi.

Ngoài ra, điều hướng trong một tab khác đến /Test hành động trực tiếp, hoạt động. Tab gốc vẫn bị lỗi cho đến khi tôi điều hướng hoặc làm mới nó như đã đề cập.

Tôi đã có thời gian làm mới điều hướng hoặc f5 không dừng lỗi. Vì vậy, việc sử dụng "chủ yếu" trong đoạn mở đầu.

Sau một ngày và một chút không thể tìm được lý do vững chắc thông qua nghiên cứu, trình gỡ lỗi JS, đơn giản hóa mã và các tình huống khác nhau; Tôi cần yêu cầu một số trợ giúp.

Javascript lỗi phản hồi

Các nhất mà tôi có thể thu thập là một status code of 0 và một error message of "error".

Phần mềm và các phiên bản

ASP.NET MVC 3 
Chrome v28.0.1500.72 m 
jQuery v1.8.3 
AttributeRouting 

Với Chrome, tôi cũng đã cố gắng đổ bộ nhớ cache và Ctrl + F5.

MVC
Tôi có một hành động bảo vệ bởi một [Authorize(Roles = "Admin")] Vô hiệu hóa thuộc tính này không xuất hiện để giải quyết vấn đề của tôi và sau đó trở đi, không. Vì vậy, xin lỗi nếu bất kỳ báo cáo trước đó nhầm lẫn. lol, ngắn trên tóc!

[GET("Test")] 
public ActionResult Test() 
{ 
    Console.WriteLine("Test"); 
    return new EmptyResult(); 
} 

Bất kỳ tệp tập lệnh javascript nào không nằm trong thư mục được bảo vệ bằng xác thực biểu mẫu.

jQuery doc.ready

Tôi có một sự kiện lỗi jQuery mà tôi đã sử dụng để tạm dừng gỡ lỗi trên để xem nội dung của các đối tượng.

//-- while I am using this method, I have also used the `error: ` 
//-- part of $.ajax with the same result. 
    $(function() 
    { 
     $(document).ajaxError(function (event, jqxhr, settings, exception) 
     { 
      Debug.Log("event: " + event); 
      Debug.Log("jqxhr: " + jqxhr.responseText); 
      Debug.Log("settings: " + settings); 
      Debug.Log("exception: " + exception); 
     }); 
    }); 

Tôi có phương pháp jQuery tải bằng các sự kiện sau.Trong khi kịch bản followig trông giống như nó sẽ slam máy chủ. Có thời gian logic để đảm bảo nó chỉ chạm mỗi 5 giây.

$(document).on('mousemove','*',function(e){ TestMethod(this,e,'mousemove');}); 

phương pháp Javascript

Đây là cuộc gọi ajax của tôi mà là đơn giản như tôi có thể làm điều đó.

function TestMethod(sender, e, eventTrgger) 
    { 
     $.ajax(
     { 
      type: "GET", 
      url: '/Test', 
      dataType: 'html', 
      success: function (html) 
      { 
       //-- tested with nothing here. 
      } 
     }); 
    } 

Fiddler

Khi lỗi xảy ra, Fiddler không hiển thị một yêu cầu GET, có nghĩa là máy chủ không phải là hit. Ngoài ra, tôi đặt một điểm ngắt trình sửa lỗi trong hành động xác nhận hành động không bị tấn công.

Bổ sung: Vì cuộc gọi ajax xảy ra sau mỗi 5 giây. Trong khi trên trang và thấy trạng thái-0 và lỗi- "lỗi"; Tôi xóa bộ nhớ cache và không làm mới trang, chrome và yêu cầu ajax bắt đầu hoạt động. Đối với bản ghi, các bộ đệm cache chrome của tôi được đặt thành ít bộ nhớ cache như tôi được phép định cấu hình.

+0

Thực tế việc xóa 'AuthorizeAttribute' làm cho nó hoạt động và khái niệm" máy chủ không bị tấn công "có vẻ hoàn toàn rời rạc. –

+0

Tôi đã vô hiệu hóa thuộc tính ngay bây giờ, nhưng cũng được điều hướng đến biểu mẫu đăng nhập với returnURL sẵn sàng. Đã xảy ra sự cố. Tôi cập nhật các Q để chỉ ra rằng sau khi bạn đọc nó .... cố gắng rất nhiều con đường khác nhau. –

+0

Tôi gặp vấn đề tương tự. Nhận yêu cầu ngắt sau một vài lần làm mới trang và tôi nghĩ rằng nó có liên quan đến cùng một vấn đề. Điều này có được khắc phục trong Chrome 29 không? –

Trả lời

8

Sự cố này dường như là lỗi về cách Chrome 28 xử lý bộ nhớ đệm cho các yêu cầu GET. Phiên bản 27 hoạt động tốt, như yêu cầu POST trong phiên bản 28.

Bạn có thể khắc phục sự cố bằng cách đặt thuộc tính 'cache' thành sai trong lệnh $ .ajax() của bạn.

+0

Vâng. Càng xa càng tốt! Tôi sẽ tiếp tục thử nghiệm nó ngày hôm nay. Tôi đã thay thế console.log của mình bằng một Cảnh báo. Vì vậy, tôi sẽ biết sớm nếu giải pháp này hoạt động. Chúc mừng cho việc tìm kiếm nó. Có lẽ một siêu liên kết đến vấn đề có thể được thêm vào câu trả lời? –

+0

Chỉ có vấn đề này trong 29.0.1547.65 trên một mac, http 0 để đáp ứng với $ .post cuộc gọi (để chắc chắn http bài). Charles không có yêu cầu http. Bắt đầu gỡ lỗi thông qua jquery cố gắng để tìm hiểu nếu có một lỗi cơ bản trên xhr. Làm tôi phát điên trong một thời gian, nhưng cuối cùng chỉ cần thêm? R = "+ Math.random() vào URL của tôi (tương đối - /Keepalive.ashx) và mã trạng thái http 0 đã biến mất và tất cả đang hoạt động trở lại. – agrath

+0

Tôi đã có lỗi này trong chrome 29 quá, nó có vẻ là cố định trong chrome 30. Thiết lập bộ nhớ cache để sai cố định nó trong chrome 29 cho tôi – Xeli