2012-05-09 27 views
5

Tôi gặp vấn đề, rằng tôi có một vài trang trong dự án của mình và tôi đã sử dụng rất nhiều yêu cầu ajax trong dự án của mình, nhưng bây giờ tôi nghĩ rằng bất cứ khi nào yêu cầu ajax được gọi là chức năng sẽ được gọi và bất cứ khi nào yêu cầu đó kết thúc, một chức năng khác sẽ gọi. Làm thế nào tôi có thể làm điều này trên toàn cầu Tôi biết tôi có thể đặt này trong mọi yêu cầu ajax nhưng tôi cần một giải pháp mà tôi làm ở một nơi và nó hoạt động trên tất cả các dự án.Làm thế nào để gọi một hàm cụ thể trên mọi yêu cầu ajax

$(document).read(function(){ 
// Suppose this document load function is written on layout page and every page is inherited from this page 
}); 

Trả lời

4

Sử dụng ajaxSetup, ví dụ

$.ajaxSetup({ 
    beforeSend: function() { 
     console.log('test'); 
    }, 
    complete: function() { 
     console.log('completed'); 
    } 
}); 

chí thiết lập beforeSend handler cho mọi yêu cầu ajax. Lưu ý rằng ajaxSetup có thể thực hiện bất kỳ tùy chọn nào có thể là $.ajax.

+0

Tôi có nên viết tài liệu này trong tài liệu sẵn sàng không? – Ahsan

+0

được thực hiện trước khi gửi, nhưng tôi nên viết gì nếu tôi muốn gọi một hàm theo yêu cầu ajax? – Ahsan

+0

Bạn nên viết nó ngay từ đầu của tệp JS (trước khi có bất kỳ cuộc gọi AJAX nào). Bạn có thể muốn kích hoạt các yêu cầu AJAX trước khi tài liệu sẵn sàng, vì vậy không có lý do gì để đưa nó vào trong '$ (document) .ready (...);'. – freakish

0

Hãy thử một cái gì đó như thế này:

$.ajax({ 
    url: "test.html", 
    context: document.body 
}).done(function() { 
    $.ajax({ 
    url: "anotherMethod.html", 
    context: document.body 
    }); 
}); 
}); 

Điều đó có nghĩa bất cứ khi nào gọi ajax hoàn thành gọi cuộc gọi mong muốn của bạn.

2

Bạn nên tạo hàm bao bọc cho ajax của mình, sau đó sử dụng hàm đó. theo cách đó, bạn có quyền kiểm soát "trung tâm" đối với cuộc gọi ajax. cái gì đó như:

//fast and crude way to extend jQuery 
$.fn.customAjax = function(params){ 

    //contains defaults and predefined functions 
    var defaults = { 
     complete : function(){...default complete hander...}, 
     beforeSend : function(){...default beforeSend handler} 
     ... 
    } 

    //merge settings 
    var finalParams = $.extend({},defaults,params); 

    //call ajax and return the deferred 
    return $.ajax(finalParams); 
} 

//use it like 
$.customAjax({ 
    url : ..., 
    method : ..., 
    data: ..., 
    complete : function(){...} //redefining in the call will override the defaults 
}); 
+0

Tuyệt vời! Tốt để xem bạn đã chăm sóc trì hoãn quá bằng cách sử dụng trở lại. – Raghav

1

.ajaxStart

đăng ký một handler được gọi khi yêu cầu Ajax đầu tiên bắt đầu.

.ajaxSucess

Đính kèm một hàm được thực hiện bất cứ khi nào yêu cầu Ajax hoàn tất thành công.

cho chi tiết doc: http://api.jquery.com/category/ajax/

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