2012-06-23 43 views
12

Tôi đang phát triển trang web của mình bằng Java. Tôi đang sử dụng jquery, ajax, như thế này:phản hồi chậm jquery ajax trong Google Chrome

$.ajax({ 
    dataType: "json", 
    url : 'getWords.htm', 
    type: 'post', 
    async : false, 
    data : {dataJSON : JSON.stringify(dataJSON)}, 
    success : function(words) { 
     ..... 
    } 
}); 

Nó hoạt động tốt nhưng trong Chrome nó hoạt động chậm hơn Firefox, IE và Opera. Trong Chrome, tôi có một chút chậm trễ (khoảng 0,8 giây). Khi tôi có bốn truy vấn ajax cho mỗi lần nhấp, nó thực sự chậm. Làm thế nào để tôi có thể sửa nó?

Trong firebug tôi thấy: gửi 5ms, chờ 512ms, nhận 3ms, nhưng trong các trình duyệt khác đều nhanh.

Cảm ơn.

+1

Khi bạn nói nó hoạt động chậm hơn trong Chrome, chậm hơn bao nhiêu? 1ms? 10ms? 100ms? – Aidanc

+2

Có vẻ như sự cố của bạn nằm trong máy chủ chứ không phải trong ứng dụng khách. – gdoron

+0

Whoa 8sec khá chậm! –

Trả lời

3

Nếu bạn không tải nội dung của .post() trên thành phần được tạo động, hãy thử đặt nó bên trong window.onload thay vì $(document).ready, đã hoạt động đối với tôi. Hy vọng nó giúp!

Cập nhật

post() bắn với một sự kiện click(), các yếu tố phụ huynh cần phải được sẵn sàng. Nhưng bạn có thể giành được một chút thời gian nếu bạn gọi hàm post() bên ngoài $(document).ready và lưu kết quả vào biến số javascript. Điều đó sẽ hoạt động như một loại initialValue mà bạn sẽ cần phải cập nhật từ lần thứ hai người dùng nhấp vào phần tử của bạn.

+0

Sự kiện của tôi được gọi khi tôi nhấn nút, làm cách nào để sử dụng window.onload? Xin lỗi, tôi mới trong javascript, tôi không hiểu câu trả lời của bạn. – sochi

1

Sử dụng async: 'true'.

Đây là mặc định và bạn không nên chuyển sang yêu cầu đồng bộ trừ khi bạn có lý do chính đáng để làm như vậy. Đầu tiên nó sẽ cho phép trình duyệt tải xuống các tệp trong các yêu cầu đồng bộ song song và thứ hai có thể chặn luồng trình duyệt.

Bằng cách này: "Kể từ jQuery 1.8, việc sử dụng async: false không được chấp nhận". (từ jQuery.ajax docu)

+1

"Tôi cần 'không đồng bộ: sai' trong trường hợp của tôi, nhưng nếu tôi chỉ định 'không đồng bộ: đúng', tôi cũng bị trì hoãn. – sochi

+1

Không chắc chắn liệu họ có cập nhật tài liệu giữa phản hồi này và bây giờ hay không. Nó chỉ bị phản đối nếu bạn đang sử dụng đối tượng $ .Deferred trả về từ cuộc gọi $ .ajax, vì nó sẽ không hoạt động trong trường hợp đó: "Kể từ jQuery 1.8, việc sử dụng async: false với jqXHR ($ .Deferred) không được chấp nhận; " – Chris

-1

đôi khi tốt hơn là sử dụng jquery trên máy chứ không phải jquery được lưu trữ trong google. phụ thuộc vào kết nối Internet, bạn có

Local

<script type="text/javascript" src="/js/jQuery.min.js"></script> 

Api từ google

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script> 
+2

Vấn đề OP là với cuộc gọi ajax, không phải là tải jquery. –

1

Something tương tự xảy ra với tôi một thời gian trước, và thời gian phản ứng là khác nhau cho mỗi trình duyệt khi gọi một AJAX, POST hoặc GET. Hóa ra là một lượng lớn dữ liệu mà tôi đã chuyển từ url, "getWords.htm" trong trường hợp của bạn. Một vài câu hỏi có thể giúp xác định sự cố trong trường hợp của bạn:

  1. Bạn gửi lại bao nhiêu dữ liệu và định dạng là gì? Hãy thử JSON và phân tích cú pháp trong hàm "THÀNH CÔNG" để tạo mã/trang HTML .
  2. Bạn đang cố tạo bao nhiêu đối tượng DOM trong một lần chụp ? Nó giúp rất nhiều để phân tích bất cứ điều gì bạn cần trên bay, mà là dễ dàng để làm một khi bạn có JSON ở phía khách hàng và tạo HTML từ đó tự động.
Các vấn đề liên quan