2010-11-05 31 views
8

Làm cách nào để gọi trạng thái sẵn sàng của Ajax theo phương thức jQuery $.ajax?

+4

Điều gì cho chính xác? '$ .ajax' mang lại' callback 'success' /' error'/'complete' của riêng nó, chúng sẽ đáp ứng tất cả nhu cầu của bạn –

+0

Xin chào, tôi muốn readyState = 1 và readyState = 4 những điểm cân bằng với jQuery là gì? – tetris

Trả lời

4

$.ajax() trả về đối tượng XMLHttpRequest, vì vậy nếu bạn thực sự muốn truy cập nó như là thay đổi trạng thái, bạn có thể làm điều này:

var xhr = $.ajax({ ... }); 
xhr.onreadystatechange = function() { alert(xhr.readyState); }; 

Nhưng callbacks built-in nên tất cả các bạn cần cho hầu hết sử dụng, đặc biệt là successcomplete.

Để thực hiện mọi việc trước khi yêu cầu kích hoạt, hãy sử dụng beforeSend hoặc phù hợp hơn cho hầu hết các trường hợp, các sự kiện .ajaxStart().ajaxStop() ... chẳng hạn để hiển thị thông báo tải bất cứ khi nào hoạt động ajax đang diễn ra.

+0

Cảm ơn, tôi sẽ kiểm tra điều này. – tetris

+0

Lưu ý: Mã này chỉ hoạt động cho đến khi jQuery 1.4.4 như với 1.5 mô-đun ajax đã được viết lại hoàn toàn. Tôi không biết một giải pháp trong các phiên bản gần đây (tôi muốn nó để kiểm tra thời gian trễ). – mgutt

+0

Điều này không có * Điều kiện Race * - HOẶC - jQuery có sử dụng lời hứa không? – Cody

1

Bạn sẽ có thể nhận tất cả những gì bạn cần bằng cách đặt các cuộc gọi lại cho các tùy chọn success, errorcomplete trong đối tượng bạn chuyển vào phương thức ajax(). Hãy xem tài liệu:

http://api.jquery.com/jQuery.ajax/

Về cơ bản, nó hoạt động như thế này:

$.ajax({ 
    url: 'ajax/test.html', 
    success: function(data) { 
     alert('Load was performed.'); 
    }, 
    error: function() {alert("error occurred.")}, 
    complete: function() {alert("ajax complete.")} 
}); 

Bạn có thể xem tài liệu cho chính xác những gì các tham số bạn có thể truy cập vào các chức năng gọi lại.

+0

Những gì đang tìm kiếm là readyState, giống như khi bạn sử dụng Js đơn giản, bạn sử dụng readyState này để viết một cái gì đó như "loading ..." ngay trước khi đánh dấu của bạn là dân cư, jQuery thành công, lỗi hoặc hoàn thành dường như không làm việc cho những gì tôi muốn. Hoặc bạn có phải chỉ giả mạo nó với jQuery? – tetris

+0

@tada Phương thức jQuery tóm tắt các cách cũ để kiểm tra các thay đổi có tính xúc tác. Tại sao không chỉ hiển thị hộp thoại tải của bạn trước khi bạn thực hiện cuộc gọi ajax và ẩn nó trong các chức năng gọi lại? Đây là những gì tôi làm và hợp lý có ý nghĩa hơn nhiều so với cách JS đơn giản. – treeface

+0

Ok cảm ơn bạn .__ – tetris

4

Method, thử nghiệm với jQuery 2.0.2:

$.ajax({ 
    beforeSend: function (jqXHR, settings) { 
     var self = this; 
     var xhr = settings.xhr; 
     settings.xhr = function() { 
      var output = xhr(); 
      output.onreadystatechange = function() { 
       if (typeof(self.readyStateChanged) == "function") { 
        self.readyStateChanged(this); 
       } 
      }; 
      return output; 
     }; 
    }, 
    readyStateChanged: function (xhr) { 
     if (xhr.readyState == 1) { 
      /* Connected! Do something */ 
     } 
    }, 
    url: "..." 
}); 

Về cơ bản, những gì tôi cần là một callback sau readyState trở thành 1 (kết nối), trong đó, trong trường hợp của tôi, là hữu ích khi thực hiện bỏ phiếu dài "đẩy "thông báo với jQuery.