Hiển thị các bài đăng có nhãn Ajax. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Ajax. Hiển thị tất cả bài đăng

Thứ Hai, 9 tháng 2, 2009

Sử dụng jQuery.sub() trong jQuery

Bài này chúng ta sẽ tìm hiểu làm thế nào? tạo một bản sao mới của jQuery có properties và method có thể thay đổi mà không ảnh hưởng đến các đối tượng jQuery gốc.

Có hai trường hợp sử dụng cụ thể mà jQuery.sub () đã được tạo ra. Việc đầu tiên là cung cấp một painless của các method overriding mà không phá huỷ hoàn toàn các method ban đầu và một được dùng để giúp đóng gói và namespacing cơ bản cho các plugin jQuery.

Lưu ý rằng jQuery.sub () không tìm cách làm bất kỳ loại phân lập - đó không phải là ý định của của nó. Tất cả các method trên phiên bản sub'd của jQuery sẽ vẫn chỉ cho jQuery bản gốc (sự kiện ràng buộc và vẫn sẽ được kích hoạt thông qua các jQuery chính, dữ liệu sẽ được liên kết với các phần tử thông qua các jQuery chính, Ajax truy vấn và các sự kiện sẽ chạy qua chính jQuery, vv.)

Lưu ý rằng nếu bạn đang muốn sử dụng plugin này để phát triển mạnh mẽ trước tiên bạn nên xem xét sử dụng một cái gì đó giống như các nhà máy sản xuất phụ tùng jQuery UI trong đó quản lý cả hai trạng thái và method plugin phụ. Một số ví dụ của việc sử dụng các nhà máy sản xuất phụ tùng để xây dựng một plugin.

Các trường hợp sử dụng cụ thể của method này có thể được mô tả tốt nhất thông qua một số ví dụ.

Ví dụ: Thêm một method jQuery phụ để nó không phải là tiếp xúc bên ngoài:

(function(){
      var sub$ = jQuery.sub();
      sub$.fn.myCustomMethod = function(){
             return 'just for me';
      };
      sub$(document).ready(function() {
            sub$('body').myCustomMethod() // 'just for me'
      });
})();
typeof jQuery('body').myCustomMethod // undefined

Ví dụ: Ghi đè một số method jQuery để cung cấp các chức năng mới.

(function() {
      var myjQuery = jQuery.sub();
      myjQuery.fn.remove = function() {
           // New functionality: Trigger a remove event
           this.trigger("remove");
           // Be sure to call the original jQuery remove method
           return jQuery.fn.remove.apply( this, arguments );
     };
     myjQuery(function($) {
           $(".menu").click(function() {
                 $(this).find(".submenu").remove();
           });
           // A new remove event is now triggered from this copy of jQuery
           $(document).bind("remove", function(e) {
                 $(e.target).parent().hide();
           });
      });
})();

Ví dụ: Tạo một plugin trả về plugin method cụ thể.
(function() {
      // Create a new copy of jQuery using sub()
      var plugin = jQuery.sub();
      // Extend that copy with the new plugin methods
      plugin.fn.extend({
            open: function() {
                  return this.show();
            },
            close: function() {
                  return this.hide();
            }
      });
      // Add our plugin to the original jQuery
      jQuery.fn.myplugin = function() {
            this.addClass("plugin");
            // Make sure our plugin returns our special plugin version of jQuery
            return plugin( this );
      };
})();
$(document).ready(function() {
       // Call the plugin, open method now exists
       $('#main').myplugin().open();
       // Note: Calling just $("#main").open() won't work as open doesn't exist!
});

DangTrung.

Chủ Nhật, 8 tháng 2, 2009

Sử sụng jQuery.post() trong Jquery

Bài viết này sẽ cho các bạn biết làm thế nào để loading dữ liệu từ máy chủ bằng cách sử dụng một HTTP POST request.

jQuery.post(url, [data ], [success(data, textStatus, jqXHR)], [dataType])

url : Một chuỗi có chứa các URL mà yêu cầu được gửi.
data : Một Map hoặc chuỗi được gửi cho máy chủ với yêu cầu.
success : (dữ liệu, textStatus, jqXHR) Một hàm callback đó là thực hiện nếu yêu cầu thành công.
DataType: Các loại dữ liệu dự kiến ​​từ máy chủ. Mặc định: Intelligent Guess (xml, json, script, hay html).

Cách dùng với Ajax

$.ajax({type: 'POST', url: url, data: data, success: success dataType: dataType });

Chức năng callback success được thông qua các data trả về, trong đó sẽ là một phần tử gốc XML hoặc một chuỗi văn bản phụ thuộc vào kiểu định dạng của response. Nó cũng thông qua tình trạng văn bản của response.

Hầu hết các trường sẽ chỉ định handler success :

$.post('ajax/test.html', function(data) {
       $('.result').html(data);
});

Ví dụ này lấy các đoạn mã HTML được yêu cầu và chèn nó vào trang.

Các trang tải xuống với POST không bao giờ được cache, vì vậy bộ nhớ cache và nếu có các tùy chọn thay đổi trong jQuery.ajaxSetup() chưa có tác dụng trên các yêu cầu này.

Ghi chú thêm:
  • Do hạn chế bảo mật của trình duyệt, hầu hết các "Ajax" yêu cầu phải tuân theo chính sách cùng một nguồn gốc; các yêu cầu có thể không thành công lấy dữ liệu từ một miền khác nhau, tên miền phụ, hoặc giao thức.
  • Nếu một yêu cầu với jQuery.post() trả về một mã lỗi, nó sẽ không âm thầm, trừ khi script cũng được gọi method .ajaxError() là toàn cục. Theo jQuery 1.5, các method .errors() của jqXHR đối tượng trả về bởi jQuery.post() cũng có sẵn để xử lý lỗi.
Ví dụ: Yêu cầu các trang test.php, nhưng bỏ qua các kết quả trả về.

$.post("test.php");

Ví dụ: Yêu cầu các trang test.php và gửi một số data bổ sung theo (trong khi vẫn bỏ qua các kết quả trả về).

$.post("test.php", { name: "John", time: "2pm" } );

Ví dụ: thông qua các mảng dữ liệu đến máy chủ (trong khi vẫn bỏ qua các kết quả trả về).

$.post("test.php", { 'choices[]': ["Jon", "Susan"] });

Ví dụ: gửi data bằng cách sử dụng form yêu cầu ajax

$.post("test.php", $("#testform").serialize());

Ví dụ: Thông báo ra các kết quả từ test.php yêu cầu (HTML hay XML, tùy thuộc vào những gì đã được trả lại).

$.post("test.php", function(data) {
       alert("Data Loaded: " + data);
});

Ví dụ: Thông báo ra các kết quả từ yêu cầu test.php với một tải trọng bổ sung dữ liệu (HTML hay XML, tùy thuộc vào những gì đã được trả lại).

$.post("test.php", { name: "John", time: "2pm" },
       function(data) {
            alert("Data Loaded: " + data);
});

Ví dụ: Bạn trở thành nội dung trang test.php, lưu trữ nó trong một đối tượng XMLHttpResponse() và áp dụng các quá trình chức năng JavaScript.

$.post("test.php", { name: "John", time: "2pm" },
      function(data) {
             process(data);
      },
      "xml"
);
Ví dụ: Bài viết gửi cho trang test.php và được các nội dung đã được trả về ở định dạng json ( "John", "thời gian" => "2:00"));>? ).

$.post("test.php", { "func": "getNameAndTime" },
    function(data){
           alert(data.name); // John
           console.log(data.time); // 2pm
    }, "json");

DangTrung.

Sử dụng jQuery.getScript() trong jQuery

Tải một tập tin JavaScript từ máy chủ bằng cách sử dụng một GET HTTP request, sau đó thực hiện nó.

jQuery.getScript(url, [success(data, textStatus)])

url : Một chuỗi có chứa các URL mà yêu cầu được gửi.
success : (data, textStatus) Một hàm callback thực hiện nếu yêu cầu success.

Đây được một cách viết tắt chức năng Ajax, tương đương với:

$.ajax({url: url, dataType: 'script', success: success });

Các callback được đã thông qua trở lại tập tin JavaScript. Điều này nói chung là không hữu ích như kịch bản được sẽ có chạy vào thời điểm này.

Script được thực hiện trong global context, do đó, nó có thể tham khảo các biến khác và sử dụng các chức năng jQuery. Đã có script nên có một số tác động trên trang hiện tại:

$('.result').html('

Lorem ipsum dolor sit amet.

');

Script sau đó có thể được bao gồm và được điều hành bởi tham chiếu tên tập tin:

$.getScript('ajax/test.js', function() {
       alert('Load was performed.');
});

Ví dụ: Nạp jQuery plugin chính thức hoạt hình màu tự động và nối kết một số hình ảnh động màu sắc cho xảy ra một khi các chức năng mới được tải.


Ví dụ: Nạp test.js file JavaScript và thực hiện nó.

$.getScript("test.js");

Ví dụ: Nạp test.js file JavaScript và thực hiện nó, hiển thị một thông báo cảnh báo khi thực hiện xong.

$.getScript("test.js", function(){
      alert("Script loaded and executed.");
});

DangTrung.

Sử dụng jQuery.getJSON() trong jQuery

Tải dữ liệu mã hóa JSON từ máy chủ bằng cách sử dụng một yêu cầu HTTP GET.

jQuery.getJSON(url, [data], [success(data, textStatus, jqXHR)])

url: Một chuỗi có chứa các URL mà yêu cầu được gửi.
data: Một bản đồ hoặc chuỗi được gửi cho máy chủ với yêu cầu.
success: (data, textStatus, jqXHR) Một hàm callback đó là thực hiện nếu yêu cầu thành công.

Đây là một cách viết tắt của Ajax, tương đương với:

$.ajax({url: url, dataType: 'json', data: data, success: callback });

Dữ liệu được gửi cho máy chủ được gắn cho các URL như là một chuỗi truy vấn. Nếu giá trị của tham số dữ liệu là một đối tượng (Map), thì được chuyển thành một chuỗi và url mã hóa trước khi nó được nối cho URL.

$.getJSON('ajax/test.json', function(data) {
    var items = [];

    $.each(data, function(key, val) {
         items.push('
  • ' + val + '
  • ');
        });

        $('
      ', { 'class': 'my-new-list',
            html: items.join('')
         }).appendTo('body');
    });

    Ví dụ này, tất nhiên, được dựa vào cấu trúc của tập tin JSON:

    {
    "one": "Singular sensation",
    "two": "Beady little eyes",
    "three": "Little birds pitch by my doorstep"
    }

    Sử dụng cấu trúc này, ví dụ như các vòng qua các dữ liệu yêu cầu, xây dựng một danh sách không có thứ tự, và gắn thêm nó cho body.

    Các callback thành công được thông qua các dữ liệu trả về, thường là một đối tượng JavaScript hoặc mảng được định nghĩa bởi cấu trúc JSON và phân tích cú pháp sử dụng method $.parseJSON(). Nó cũng thông qua tình trạng văn bản của response.

    JSONP

    Nếu URL bao gồm chuỗi "callback =?" (hoặc tương tự, theo quy định của phía máy chủ API), yêu cầu được đối xử như JSONP thay thế. Xem các cuộc thảo luận về các kiểu dữ liệu jsonp trong $.ajax() để biết thêm chi tiết.

    Ví dụ: tải bốn hình ảnh con mèo mới nhất từ JSONP Flickr API.

    Ví dụ: Nạp dữ liệu JSON từ test.js và truy cập một tên từ các dữ liệu JSON trả lại.

    $.getJSON("test.js", function(json) {
          alert("JSON Data: " + json.users[3].name);
    });

    Ví dụ: Nạp dữ liệu JSON từ test.js, đi dọc theo dữ liệu bổ sung, và truy cập một tên từ các dữ liệu JSON trả lại.

    $.getJSON("test.js", { name: "John", time: "2pm" }, function(json) {
           alert("JSON Data: " + json.users[3].name);
    });

    DangTrung.

    Thứ Bảy, 7 tháng 2, 2009

    ASP.Net MVC : Ajax và jQuery

    Tôi đã được sử dụng Asp.Net MVC trong thời gian khá lâu và thực sự thích nó. Nó rất dễ dàng để làm công cụ ajax nhưng tôi nghĩ rằng, dễ dàng hơn nếu bạn sử dụng jQuery.

    Trong bài này tôi sẽ làm bao gồm :
    • Làm thế nào để cập nhật một phần
    • Làm thế nào để thực hiện một Nhận yêu cầu với các tham số bổ sung trong chuỗi truy vấn
    • Làm thế nào để tạo một yêu cầu Đăng với paremeters bổ sung bên trong cơ thể yêu cầu
    • Điều gì sẽ xảy ra nếu javascript bị vô hiệu hóa hoặc người dùng bằng cách sử dụng một trình duyệt cũ hơn
    Menu giao diện

    Các mục trình đơn trong trang chủ sẽ được như dưới đây;





    Như đã thấy trong các phần tô đậm thay vì sử dụng Ajax.ActionLink tôi sẽ sử dụng  Html.ActionLink với lớp tuỳ thuộc tính xác định loại yêu cầu sẽ được gọi bằng phương pháp ajax jQuery. Tất cả các trình đơn invokes phương pháp hành động TestMethod trong lớp HomeController.

    Chúng ta cần thêm các thư viện và một jquery javascript tùy chỉnh tập tin có chứa các phương pháp helper.

    Đây là Helper.js


    Phần code tiếp theo của  Helper.js


    Cập nhật Xem và Lưu kết quả cuộc gọi Ajax với jQuery

    Các đối tượng javascript Helper có hai phương pháp helper được MakeRequest và UpdateView. Phương pháp MakeRequest chấp nhận một đối tượng có tính chất bổ sung và các chức năng như url, dữ liệu, contentType. Phương pháp thứ hai chỉ đơn giản UpdateView cập nhật các khu vực trong thành phần với id chính. Nhưng vì div chính cũng chứa các div chân trang chúng tôi chỉ đơn giản là lọc div chân và sau đó cập nhật phần còn lại của chính bằng một selector jquery đơn giản.


    Bộ chọn jQuery là:

    $("#main > :not(#footer)");

    Phần thứ hai của lớp helper bắt đầu từ dòng 30 được thực hiện khi các tài liệu được nạp. Sau khi tài liệu chúng tôi kết nạp một sự kiện nhấp chuột vào trình đơn div (id = trình đơn). Vì vậy:
    • Bất cứ khi nào một sự kiện nhấp chuột xảy ra bên trong trình đơn div chúng tôi kiểm tra các mục tiêu, nếu nó là một phần tử neo.
    • Nếu nó là một thẻ neo chúng tôi kiểm tra xem nó là thuộc tính lớp
    • Nếu các yếu tố đã neo html lớp chúng tôi gọi một Http Đăng yêu cầu. nếu nó đã jsonGet lớp chúng tôi gọi một Http Nhận và gửi dữ liệu thêm trong chuỗi truy vấn, nếu nó có jsonPost lớp chúng tôi một bài incoke Http và gửi dữ liệu bổ sung trong cơ thể yêu cầu.
    Khi thành công chức năng gọi lại được gọi là nó vượt qua các phản ứng recevied với phương pháp UpdateView trong đối tượng người trợ giúp. Sau khi nhận được mặt UpdateView đầu vào nó kiểm tra kiểu đối số này. Nếu nó là một chuỗi các phương pháp chỉ cần cập nhật với các mục được thông qua. Nếu đầu vào nhận được là một đối tượng phương pháp lặp qua các thuộc tính của đối tượng và tạo ra một yếu tố ul và cập nhật với ul này.

    Phương pháp UpdateView từ các đối tượng người trợ giúp.


    Và cuối cùng ở đây là ActionMethod TestMethod sẽ xử lý các yêu cầu gửi đến.


    Bây giờ khi chúng tôi nhận được yêu cầu
    • Trước tiên, chúng tôi kiểm tra xem nó là một yêu cầu ajax nếu nó không phải là chúng ta chỉ cần vượt qua các đối tượng mô hình để xem TestMethod
    • Nếu yêu cầu này là một yêu cầu ajax chúng tôi kiểm tra kiểu phản ứng mà người dùng yêu cầu nếu contentType là html, chúng tôi khiến một tên partialview SimplePartialView.
    • Nếu một yêu cầu ajax với contentType của json chúng tôi kiểm tra HttpMethod của yêu cầu đó. Nếu httpmethod là GET chúng ta đọc được đăng các giá trị (mà cũng có những cái được thêm vào qua jQuery bên cạnh những người trong url yêu cầu như trong masterpage) và gửi lại cho khách hàng ở định dạng json. Nếu phương pháp POST http là chúng ta đọc dữ liệu bổ sung từ cơ thể yêu cầu và gửi chúng cho khách hàng về định dạng json.
    Tất nhiên bạn có thể có một actionmethod thêm rằng sẽ chỉ nhận các yêu cầu được làm bằng Http Đăng HttpPost sử dụng thuộc tính như:

    [HttpPost]
    public ActionResult TestMethod()

    Điều gì sẽ xảy ra nếu người dùng đã bị vô hiệu hoá javascript hoặc sử dụng một trình duyệt cũ hơn

    Ứng dụng của chúng tôi sẽ vẫn chạy. Bởi vì chúng tôi sử dụng Html.ActionLink thay vì Ajax.ActionLink nếu javascript bị vô hiệu hóa các mã jQuery của chúng tôi sẽ không được gọi. Vì vậy, ví dụ nếu người dùng nhấp vào JSON (Post) liên kết nó sẽ nhận được một phản ứng html thay vì json bởi vì chúng tôi kiểm tra xem yêu cầu là một yêu cầu ajax trong TestMethod với phương pháp khuyến nông isAjaxRequest và nếu nó không phải là chúng tôi chỉ đơn giản render xem TestMethod.

    Sau đây là xem TestMethod TestMethod.aspx

     and SimpleViewPartialView.ascx


    Chúc các bạn thành công.
    DangTrung.

    Sử dụng jQuery.param trong jQuery

    Tạo một tuần tự mô tả của một mảng hay đối tượng, phù hợp cho sử dụng trong một chuỗi truy vấn URL hoặc yêu cầu của Ajax.

    jQuery.param(obj) (phiên bản 1.2)
    obj : Một mảng hoặc đối tượng cho serialize.

    jQuery.param(obj, traditional) (phiên bản 1.4)
    obj : Một mảng hoặc đối tượng cho serialize.
    traditional : Một Boolean cho biết có nên thực hiện một truyền thống "shallow" serialization.

    Chức năng này đang sử dụng trong nội bộ để chuyển đổi các giá trị phần tử form thành một đại diện chuỗi tuần tự.

    Theo jQuery 1.3, giá trị trả về của hàm số được sử dụng thay vì các function như một String.

    Theo jQuery 1.4, các tham số đối tượng method $.serializes() sâu xa một cách đệ quy cho phù hợp với ngôn ngữ hiện đại và các framework như PHP và Ruby on Rails. Bạn có thể tắt chức năng này bằng cách thiết lập

    jQuery.ajaxSettings.traditional = true;.

    Nếu đối tượng đã thông qua đang trong một mảng, nó phải là một mảng của các đối tượng trong định dạng được trả về bởi serializeArray().

    [{name:"first",value:"Rick"},
    {name:"last",value:"Astley"},
    {name:"job",value:"Rock Star"}]

    Lưu ý: Do một số framework có hạn chế khả năng phân tích các mảng tuần tự, chúng ta nên chú ý khi truyền một đối số đối tượng có chứa các đối tượng hoặc các mảng lồng nhau trong mảng khác.

    Trong jQuery 1,4 HTML5 yếu tố đầu vào được tuần tự.

    Chúng ta có thể hiển thị một đại diện chuỗi truy vấn của một đối tượng và một phiên bản URI-decoded trong giống như sau:

    var myObject = {
         a: {
              one: 1,
              two: 2,
              three: 3
          },
          b: [1,2,3]
     };
    var recursiveEncoded = $.param(myObject);
    var recursiveDecoded = decodeURIComponent($.param(myObject));

    alert(recursiveEncoded);
    alert(recursiveDecoded);

    Ví dụ : tuần tự key/value của một đối tượng.

    Ví dụ: tuần tự một vài đối tượng phức tạp

    $.param({ a: [2,3,4] })
    kết quả : "a=2&a=3&a=4"

    $.param({ a: [2,3,4] })
    kết quả : "a[]=2&a[]=3&a[]=4"

    $.param({a:{ b:1,c:2 }, d:[3,4,{ e:5 }]})
    kết quả : "a=[object+Object]&d=3&d=4&d=[object+Object]" >=1.4:

    $.param({a:{b:1,c:2}, d:[3,4,{ e:5 }]})
    kết quả : "a[b]=1&a[c]=2&d[]=3&d[]=4&d[2][e]=5"

    DangTrung.

    Sử sụng Ajax request (Start, Stop, Send, Success) trong Jquery

    .ajaxSend()
    Attach một chức năng được thực hiện trước khi Ajax yêu cầu được Send.

    ajaxSend(handler(event, XMLHttpRequest, ajaxOptions))

    Ví dụ:
    Hiển thị tin nhắn trước khi một yêu cầu Ajax được gửi.

    $("#msg").ajaxSend(function(evt, request, settings){
            $(this).append("
  • Starting request at " + settings.url + "
  • ");
    });

    .ajaxStart()
    Đăng ký một handler được gọi khi Ajax yêu cầu Start

    .ajaxStart( handler() )

    Ví dụ:
    Hiển thị tin nhắn loading bất cứ khi nào một Ajax bắt đầu yêu cầu (và không ai đang được active).

    $("#loading").ajaxStart(function(){
           $(this).show();
    });

    .ajaxStop()
    Đăng ký một handler được gọi khi Ajax yêu cầu hoàn thành

    .ajaxStop( handler() )

    Ví dụ:
    Ẩn tin loading message sau khi tất cả các yêu cầu Ajax đã dừng lại.

    $("#loading").ajaxStop(function(){
           $(this).hide();
    });

    .ajaxSuccess()
    Attach một chức năng để thực thi bất cứ khi nào một Ajax yêu cầu hoàn thành công

    .ajaxSuccess(handler(event, XMLHttpRequest, ajaxOptions))

    Ví dụ:
    Hiển thị tin nhắn khi một yêu cầu Ajax hoàn tất thành công.

    $("#msg").ajaxSuccess(function(evt, request, settings){
          $(this).append("
  • Successful Request!
  • ");
    });

    DangTrung.

    Sử sụng Ajax request (errors) trong Jquery

    Mô tả: Đăng ký một handler được gọi khi Ajax hoàn chỉnh với các yêu cầu lỗi.

    Bất cứ khi nào một yêu cầu Ajax hoàn thành với một lỗi, jQuery kích hoạt các sự kiện ajaxError. Bất kỳ và tất cả các xử lý đã được đăng ký với ajaxError(). Phương pháp được thực hiện vào thời gian này.

    Để thực hiện phương pháp này trong hành động, thiết lập một yêu cầu Ajax load.

    Gắn kết xử lý sự kiện cho phần tử:

    $("div.log").ajaxError(function() {
           $(this).text( "Triggered ajaxError handler." );
    });

    Bây giờ, một yêu cầu Ajax sử dụng jQuery method bất kỳ:

    $("button.trigger").click(function() {
           $("div.result").load( "ajax/missing.html" );
    });

    Khi người dùng nhấp vào nút và yêu cầu Ajax không thành công, bởi vì các tập tin yêu cầu là còn thiếu, thông điệp đăng nhập được hiển thị.

    Lưu ý: Vì ajaxError() được thực hiện như một method đối tượng cá thể jQuery.

    Tất cả các bộ xử lý ajaxError được gọi, bất kể những gì Ajax yêu cầu được hoàn thành. Để phân biệt giữa các request, bạn có thể sử dụng các tham số truyền cho handler. Mỗi lần một handler ajaxError được thực thi, nó được thông qua các đối tượng sự kiện, đối tượng jqXHR (jQuery 1.5, các đối tượng XHR), và đối tượng thiết lập được sử dụng trong việc tạo ra các request. Nếu request không thành công vì JavaScript xãy ra lỗi, các đối tượng error được thông qua cho trình xử lý như một tham số thứ tư. Ví dụ, cho hạn chế việc gọi lại lỗi đến các sự kiện chỉ xử lý đối phó với một URL cụ thể:

    $( "div.log" ).ajaxError(function(e, jqxhr, settings, exception) {
            if ( settings.url == "ajax/missing.html" ) {
                    $(this).text( "Triggered ajaxError handler." );
            }
    });

    Ví dụ:
    Hiển thị tin nhắn khi một yêu cầu Ajax không thành công.

    $("#msg").ajaxError(function(event, request, settings){
              $(this).append("
  • Error requesting page " + settings.url + "
  • ");
    });

    dangtrung.

    Sử sụng Ajax request (complete) trong Jquery

    Mô tả: Đăng ký một handler để được gọi khi Ajax yêu cầu hoàn tất. Đây là một sự kiện Ajax.

    Bất cứ khi nào một Ajax yêu cầu hoàn tất, jQuery kích hoạt các sự kiện ajaxComplete. tất cả các xử lý đã được đăng ký với các method ajaxComplete() sẽ được thực hiện vào thời gian này.

    Để thực hiện method này trong action, chúng ta có thể thiết lập một yêu cầu Ajax cơ bản như sau:

    Trigger

    Chúng ta có thể đính kèm handler sự kiện của chúng ta cho phần tử bất kỳ:

    $('.log').ajaxComplete(function() {
          $(this).text('Triggered ajaxComplete handler.');
    });

    Bây giờ, chúng ta có thể làm cho một Ajax yêu cầu sử dụng method jQuery bất kỳ:

    $('.trigger').click(function() {
           $('.result').load('ajax/test.html');
    });

    Khi người dùng nhấp vào nút và yêu cầu Ajax hoàn tất, các tin nhắn đăng nhập được hiển thị.

    Lưu ý:. Vì ajaxComplete() được thực hiện như một phương pháp của cá thể đối tượng jQuery,

    Ví dụ:
    Hiển thị tin nhắn khi một yêu cầu Ajax hoàn tất.

    $("#msg").ajaxComplete(function(event,request, settings){
          $(this).append("
  • Request Complete.
  • ");
    });

    DangTrung.

    Thứ Tư, 20 tháng 2, 2008

    Những Ghi Nhớ Khi Làm Việc Với Ajax

    Giờ đây, khi nhắc đến Ajax, chắc hẳn bạn - những người yêu thích lập trình - không còn cảm thấy xa lạ như trước kia mà thậm chí còn hình dung ra sự giản đơn và thuận tiện biết bao khi ứng dụng nó.
     
    Nhưng, liệu bạn đã nắm vững những quy tắc then chốt, những “mẹo nhỏ” hữu ích khi lập trình với Ajax chưa nhỉ? Dù bạn đã rõ hay...trót quên, vẫn xin mời bạn tham khảo bài viết này như một cách ôn lại kiến thức trọng tâm đầy bổ ích! 


    Đánh dấu trang và quay lại

    Khi tự bạn điều khiển những gì đang diễn ra trên website, sử dụng JavaScript để làm xuất hiện hay biến mất các đối tượng trên trang hay thậm chí là sau khi toàn bộ trang được hiển thị hoàn toàn, bạn sẽ nhanh chóng nhận ra rằng, nút Quay lại (Back) của trình duyệt đã mất hoàn toàn tác dụng! Nút Quay lại này hoạt động bằng cách dùng đối tượng ‘history’ của trình duyệt, lưu lại danh sách tất cả các trang đã được truy cập liên tiếp gần đây nhất. Nhưng, nếu bạn không mở bất kỳ trang mới nào (vâng, như bạn biết, Ajax không cần phải refresh trang khi cần hiển thị thông tin), thì đối tượng ‘history’ kia rõ ràng chẳng lưu được chút manh mối gì. Đây là điều bạn cần lưu ý khi viết các ứng dụng Ajax.

    Và nếu như cần thiết, hãy trang bị cho site của bạn một nút Back của riêng mình. Người dùng có thể muốn quay lại cửa sổ trước đó và bạn có nhiệm vụ phải lưu giữ những thông tin di chuyển này. Thật đáng tiếc là ngay cả tiện ích đánh dấu trang (Bookmark) cũng trở nên vô dụng như thế! Đáp án cụ thể cho bài toán này ra sao, xin được dành câu trả lời cho bạn nghiên cứu.

    Đưa ra thông báo trực quan

    Phần lớn thời gian của mình, Ajax hoạt động một cách “thầm lặng” và điều này đôi khi “làm khó” người dùng. Nếu bạn tải về một lượng lớn thông tin và đang chờ đợi phản hồi từ phía máy chủ, chắc chắn một hình ảnh “nhấp nháy” nào đấy sẽ vô cùng có ích với người dùng. Một chiếc đồng hồ cát xoay tròn, và khách hàng sẽ biết rằng họ cần kiên nhẫn! Bức hình này nên là dạng ảnh động (.gif), đồng thời phối hợp với đoạn mã JavaScript dưới đây, hiệu ứng “ẩn, hiện” sẽ càng thêm phần thú vị:

    document.getElementById(“image1”).style.visibility= “visible”;
    document.getElementById(“image1”).style.visibility= “hidden”;

    Rõ ràng rằng, người dùng luôn muốn thấy một tín hiệu nào đấy báo cho họ biết rằng kết nối đang được thực hiện, dạng như thanh tiến trình màu xanh với các gạch nối càng lúc càng đầy cũng là một ý tưởng không tồi, và chắc chắn họ sẽ hài lòng với site của bạn!

    Hãy để người dùng "tự nhiên"

    Các ứng dụng Ajax dường như đang tự mình thi hành “phận sự” bởi chúng được thực thi phía sau giao diện người dùng. Chúng luôn sẵn sàng kết nối tới server, ngay cả khi người dùng không hề mong muốn – trong trường hợp họ vô tình gõ nhầm thông tin chẳng hạn. Rất dễ hình dung cảm giác lúc đó của bạn ra sao, khi ngay lúc bạn vừa gõ một chữ nào đấy, lập tức thông tin này đã được lưu lại database mà chẳng hề “xin phép” lấy một lời. Vậy nên, để tốt nhất, bạn hãy lưu ý một số điều nhỏ sau:

    - Đừng bao giờ lưu thông tin ngay lập tức, vừa tốn băng thông mà chưa chắc đã được sự đồng ý của người dùng.

    - Hãy nhớ rằng, người dùng luôn muốn “giao tiếp” nhiều hơn với ứng dụng. Hãy làm các thủ tục xác thực dữ liệu ngắn gọn hơn, đỡ mất thời gian hơn và cho người dùng quyền quyết định khi nào thì cần xác thực. Đấy chính là yếu tố tiên quyết trong quá trình thiết kế giao diện người dùng!

    - Cuối cùng, đừng quên cung cấp cho người dùng cách thức “sửa sai” thao tác (Undo).

    Ghi nhớ các trình duyệt

    Thế giới thật rộng lớn và cũng có rất nhiều trình duyệt! Người dùng sử dụng trình duyệt họ yêu thích, còn bạn, sẽ ra sao khi chỉ kiểm tra ứng dụng của mình trên một loại trình duyệt mà thôi? Sẽ thật tệ nếu bạn chỉ viết riêng cho Internet Explorer, Firefox mà quên mất rằng, trong thế giới World Wide Web, có vô vàn trình duyệt khác nhau, có loại thậm chí còn không hỗ trợ JavaScript, loại khác lại mặc định tắt chúng đi! Hãy ghi nhớ điều này và xây dựng trước một phương án dự phòng không bao giờ là thừa cả.

    Cho người dùng thấy sự thay đổi

    Sức mạnh của Ajax chính là việc hiển thị dữ liệu trên một trang không cần refresh bằng cách dùng thẻ , , hay ngay cả các đối tượng thuần HTML như textbox chẳng hạn. ứng dụng Ajax có thể thay đổi dữ liệu ngay sau khi chúng thông báo tới server, nhưng lại không thông báo với người dùng. Lấy ví dụ, bạn có một bảng dữ liệu và mặc định rằng sẽ được tự động cập nhật ngay khi database có thay đổi. Người dùng có thể không nhận thấy rằng thông tin đã không còn như trước, rằng bạn đã thay đổi thành phần trang, và đương nhiên là họ đã hụt mất những thông tin quan trọng. Lại một lần nữa, việc phát ra “tín hiệu” thay đổi tới người dùng sẽ giúp bạn rất nhiều. Nếu bạn vừa thay đổi một số chữ, đơn giản thôi, hãy làm cho nó hiển thị khác đi một chút. Đoạn mã sau dùng để thay đổi màu chữ trong thẻ

    thành màu đỏ bằng cách sử dụng linh hoạt thuộc tính style:

    document.getElementById(“targetDiv”).style.color = “red”;.

    Còn nếu bạn muốn thay đổi màu nền, hãy dùng đoạn mã

    document.getElementById(“targetDiv”).style.background-color = “red”;

    Trong đó, “targetDiv” là mã ký hiệu của thẻ Div mà bạn gán cho.

    Tránh làm chậm trình duyệt

    Những ứng dụng Ajax có thể rất lớn và chắc chắn chiếm dụng một lượng tài nguyên vật lí không nhỏ. Tốc độ CPU, bộ nhớ RAM có thể bị “ngốn” rất nhiều nếu như bạn không quan tâm xử lí những đối tượng phức tạp trong quá trình khởi tạo hay tham chiếu. Thông thường, một số nhà phát triển ứng dụng lại xài Ajax cũng chỉ bởi vì nó đang “nóng”!! Quan niệm này cần được lưu tâm hơn! Đúng vậy, Ajax có thể giải quyết được nhiều vấn đế, nhưng bạn không nhất thiết phải dùng nó nếu chẳng có lí do gì. Đừng quên rằng, không phải trình duyệt nào cũng hỗ trợ Ajax (hoặc thậm chí ở chế độ mặc định tắt JavaScript). Vậy nên, đừng vì độ “hot” của Ajax mà quên đi mất tính khả dụng và tôc độ của chương trình bạn nhé!

    Quản lý những thông tin riêng tư

    Với Ajax, thật dễ để bạn gửi thông tin lên server mà không cần sự chú ý của người dùng. Nói theo cách khác, quá trình liên lạc giữa máy khách (client) và máy chủ (server) được diễn ra một cách “thầm lặng”. Nhưng sự thật là, không phải người dùng nào cũng muốn gửi thông tin lên server ngay. Bạn hãy lưu tâm đến vấn đề nhạy cảm này! Mặc dù thương mại điện tử tại Việt Nam chỉ mới chập chững những bước đầu tiên, những tổn thất xảy ra là điều không thể tránh khỏi, nhưng chính vì thế bạn càng phải nâng cao tinh thần bảo vệ người dùng. Internet rõ ràng đầy rẫy những cạm bẫy và sự thật thì môi trường này không phải là nơi hoàn hảo để lưu giữ thông tin có tính riêng tư. Nếu bạn định gửi mã số Thẻ tín dụng hoặc mã Bảo mật của thẻ mà không được sự đồng ý của người dùng, rất có thể bạn sẽ phải đói mặt với nhiều rắc rối! Do đó, hãy cho người dùng thấy được lợi ích của việc hoài nghi: Luôn hỏi trước khi gửi dữ liệu!

    Xây dựng phương án dự phòng

    Sự sống còn của Ajax phụ thuộc vào tín hiệu kết nối tới server, nhưng người dùng thì không phải lúc nào cũng trực tuyến. Server của bạn có thể bị “chết đứng” bất cứ lúc nào, và người dùng rất có thể đang làm việc với các thông tin được lưu trong bộ đệm trình duyệt từ trước đó! Nếu bạn không thể kết nối đến server khi đang online, thì việc xây dựng một phương án dự phòng là rất cần thiết (một server dự trữ chẳng hạn). Cũng đừng quên việc hỗ trợ các trình duyệt không có JavaScript nữa nhé!

    Hiển thị thông tin trên các cỗ máy tìm kiếm

    Cơ chế tìm kiếm của Google dựa trên việc sàng lọc thông tin từ hàng tỉ website theo thông số mà người dùng cung cấp, nhưng ứng dụng Ajax của bạn lại load thông tin lên dựa trên sự tương tác của người dùng mà chẳng cần refresh lại trang - điều này khiến Google sẽ không thể “nhìn” thấy được những thông tin như thế. Vậy nên ghi nhớ kỹ rằng, để thông tin trên website của bạn có thể được các cỗ máy tìm kiếm “mò” tới, bạn cần cung cấp những dữ liệu đặc tả nội dung trang. Làm điều này như thế nào? Không khó! Chỉ cần sử dụng các thẻ < meta> đặt trong phân đoạn của mã trang, các cỗ máy tìm kiếm có thể “đánh dấu” bạn dễ dàng! Và nếu thực sự hứng thú về các thẻ < meta> này, mời bạn ghé qua địa chỉ sau đây để tìm hiểu thêm cặn kẽ: http://www.searchenginewatch.com/webmasters/meta.html

    Cuối cùng, xin lưu ý đến bộ đệm trình duyệt

    Một số trình duyệt như Internet Explorer thường lưu lại thông tin về các website đã truy cập trong bộ đệm riêng của nó (thuật ngữ chuyên ngành gọi là “cache”). Điều này đồng nghĩa với việc, nếu ai đó truy cập đến cùng một địa chỉ URL trong một khoảng thời gian giới hạn nào đấy, thông tin hiện lên cho họ có thể chính là những thông tin vừa xem (được lấy ra từ cache).

    Về nguyên tắc, điều này làm quá trình tải trang nhanh chóng hơn, các thông tin được coi là giống với lần truy cập trước có thể sẽ không cần phải tải về lần nữa, mà chỉ cần lấy từ cache ra và hiển thị lên. Nhưng với các website có ứng dụng Ajax thì đây đúng là một vấn đề lớn! Tại sao lại như vậy? Rất đơn giản, ở Ajax không có tính năng làm mới toàn bộ trang mà chỉ là một vài thành phần trong trang! Do đó, nếu khi bạn đã thay đổi dữ liệu trên trang mà kết quả trả về giống hệt như lúc trước thì không còn nghi ngờ gì nữa, bạn chắc hẳn đã gặp rắc rối rồi! Vậy nên, để hạn chế việc lưu thông tin đệm trong ứng dụng Ajax, bạn có thể đặt nhiều thông số header khác nhau khi gửi trả dữ liệu từ server, như đoạn code PHP dưới đây:

    header(“Cache-Control”, “no-cache”);
    header(“Du-lieu-header-tuy-y”, “no-cache”);
    header(“Expires”, “-1”);

    Mặc dù vậy, đoạn code trên lại không có tác dụng gì với Internet Explorer do việc lưu thông tin trong cache của IE lại phụ thuộc phần lớn vào địa chỉ trình duyệt. Do đó, có một cách rất hay là luôn thay đổi địa chỉ ứng dụng khi truy vấn đến server. Để làm điều này, bạn chỉ cần khai báo một biến ngẫu nhiên nào đấy (mà server chẳng dùng làm gì) vào phần cuối của địa chỉ, chẳng hạn như:

    var myUrl = “data.php?name=bcvt” + “&t=” + new Date().getTime();

    Một ý tưởng không tồi khi đưa thêm biến “t” vào địa chỉ URL trên, với “t” là thời gian hiện tại tính bằng mili giây. Vì địa chỉ này chắc chắn chưa từng được truy cập, nó sẽ không bị lưu trong bộ đệm cache trước đây và ứng dụng của bạn chắc chắn sẽ chạy “ngon lành”!

    Lời kết

    Như bạn thấy đó, việc lập trình Ajax tuy hết sức thú vị những cũng ẩn chứa nhiều “rắc rối nho nhỏ” phải không nào? Nếu không biết cách khắc phục chúng hoặc không để ý lưu tâm, các ứng dụng của bạn rất có thể sẽ hoạt động không được như mong muốn khi thiết kế. Hy vọng qua bài viết, các bạn hiểu được phần nào những “yếu điểm” của Ajax để từ đó tìm tòi hơn, sáng tạo ra những “chiêu thức” khắc phục cho riêng mình.