Log of my life

Subscribe to RSS feed

Posts tagged with "Ajax"

Use synchronous request in jQuery.ajax

,

Đã bao giờ bạn sử dụng AJAX (jQuery) để check username tồn tại như sau chưa?
function checkUser(u) {
    var isExist = false;
    $.post(
        'index.php',
        {'username': u},
        function(ret) {
            isExist = ret;
        }
    );

    return isExist;
}

if( checkUser('donamkhanh') ) {
    alert('donamkhanh already exist');
}
else {
    alert('donamkhanh does not exist');
}


Theo bạn, nếu chạy đoạn mã trên thì sẽ ra kết quả nào (giả sử rằng server script hoàn toàn chạy chính xác, trả về giá trị true/false hay 1/0 gì đó & username donamkhanh đã tồn tại)?

Do mặc định trong jQuery tất cả các request đều được sent asynchronous nên trong quá trình send request thì hàm checkUser đã return luôn giá trị lúc khởi tạo biến isExist = 0 rồi. Vậy nên kết quả luôn thông báo là username donamkhanh chưa tồn tại smile

Cách fix rất đơn giản, sử dụng thuộc tính async của $.ajax. Các hàm $.post hay $.get không có thuộc tính này vì
This is jQuery's low-level AJAX implementation. See $.get, $.post etc. for higher-level abstractions that are often easier to understand and use, but don't offer as much functionality (such as error callbacks).


Code ở trên sẽ sửa lại như sau:
function checkUser(u) {
    var isExist = false;
    $.ajax({
        async: false,
        type: "POST",
	url: "ajax.php",
	data: "username=" + u,
	success: function(msg){
	     isExist = msg;
	}
    });

    return isExist;
}

Nếu set async = false, jQuery sẽ sử dụng synchronous cho các request. Ở ví dụ này bạn có thể thấy nó chưa thực sự cần thiết (vì có thể nhét đoạn check vào luôn trong callback function của $.post, $.get hay bất cứ ajax method nào của jQuery), tuy nhiên nếu bạn phải viết nhiều hàm (ajax) và các hàm này lấy kết quả của nhau để tính toán thì việc set synchronous là bắt buộc. Nếu không thì sẽ xảy ra tình trạng nhiều biến nhiều hàm lon ton cầm đèn dầu chạy trước ô tô ^^

Source: http://donamkhanh.com/2009/10/31/use-synchronous-request-in-jquery-ajax.html

jWYSIWYG

, , ,


Một trình editor tý hon cho web yes

Có lẽ mình nên chuyển sang dùng thằng này chăng? Cái mà thằng này đang thiếu là gì? Chắc chỉ cần thêm chức năng upload ảnh nữa là đủ rồi. Người dùng cần gì? Cũng chỉ là format đoạn văn bản, chèn ảnh, chèn link (riêng 2 cái chèn ảnh chèn link lại tuỳ vào đối tượng khách hàng mà có nhu cầu sử dụng khác nhau. Người thì chỉ cần lấy link ảnh ở chỗ khác paste vào là okie, người thì thích tự upload lên, rồi link điền vào luôn, nguời thì thích upload riêng rồi browse chọn file để lấy link....) đủ kiểu.

Dù thế nào thì tôi cũng rất khoái thằng editor này, nhỏ gọn. Ít ra có thể áp dụng cho phần guest form yes

Hứng thú với editor này? Mời bạn vào link này để biết thêm: http://code.google.com/p/jwysiwyg/

Whois domain version 3.0

, , ,

Nâng cấp bản 1.0 lên thành 3.0, cho phép quick check theo phần mở rộng của domain.

Một số tính năng mới:
  1. Phần mở rộng có thể tùy biến bằng cách thêm vào trong file list_ext.txt (phân cách nhau bằng ký tự Enter: \n).
  2. Lưu lại các domain đã được check vào file checked_domain.txt.
  3. Tốc độ quick check nhanh (chỉ sử dụng nslookup).


Source code & phân tích sẽ được đưa sang donamkhanh.info

Demo: http://donamkhanh.info/lab/ajax/whoisv3
Download: http://donamkhanh.com/download/index.php?act=view&id=23

Swap Item

, , , ...

Hừ, có thằng ki bo kẹt xỉ, bẩn tính đíu chịu được bomb Cũng có thằng sĩ diện hão, tự tin thái quá, rỗng tuếch nhưng lại cứ tưởng thế là hay down

Thời gian làm con người ta thay đổi. Ghê gớm...

Post thử thành quả của mình với Mr Tuyển yes Còn mấy cái hiệu ứng nữa nhưng đòi hỏi phải login bằng root admin mà lại chưa tắt cái Devel nên sợ show hết "hàng họ" nhỡ người ta tưởng là lỗi thì chít bigsmile

Jquery UI - Droppables

, , ,

Ngày đầu tiên của tuần, của tháng mới, nhận được ngay thông báo xanh rờn của Mr Tuyển: 5/12 phải xong con CareToTrade scared Chậm 1 ngày trừ 100$ (oánh vào tiền thưởng) no, quên report 10k/lần doh Mệt đây! Và hôm nay đây, 9h mới về đến nhà awww Mệt íu chịu được. Sáng nhờ thằng Ty già nó mua hộ cái ổ Samsung 160GB p Cứ tưởng tối về chỉ việc cắm vào là okie ai dè íu có...cáp nguồn cho ổ knockout Mai lại bảo nó qua hỏi hoặc mua thôi down Công nhận mình làm ra tiền rồi mình mua đồ về xài sao mà...xót thế, gần 1tr chứ ít hỏi gì bigeyes Nhưng dù sao cũng đáng tự hào, hehe... Giờ đến cái liên quan đến title của entry này, Droppable penguin Đầu tiên là ngồi cả sáng nay, mãi không làm thế nào để Draggable được 1 đối tượng down Quái thật, làm đúng theo manual rồi mà vẫn ko chạy. Hóa ra, lý do cực lãng xẹt: Drupal nó dùng bản jQuery tí hon thành thử bị lược bớt (?) một số cái nên khi mình xài UI thì nó tịt ngóm faint Draggable được rồi thì lại mắc ở Droppable lol Chuối thế chứ lại banana
$(".block").draggable({helper: 'clone'});
$(".drop").droppable({
	accept: ".block",
	activeClass: 'droppable-active',
	hoverClass: 'droppable-hover',
	drop: function(ev, ui) {
		$(this).append("<br>Dropped!");
	}
});
Append ngon lành, nhưng muốn lấy dữ liệu thì làm sao ta confused interface.eyecon.ro thì dùng luôn ID của div vừa làm id cho CSS vừa làm ID của product.
$('#cart').Droppable(
			{
accept: 'product', 
activeclass: 'activeCart', 
hoverclass: 'hoverCart',
drop: function(ev, ui) {
$("#hidden_item_id").val($('span', ui.draggable.element));
 }
			}
		);
Không biết nên lấy theo span value hay là lấy theo div id nhỉ? Nói chung là cách nào cũng được, nếu theo span thì như trên, còn theo ID thì như thế này:
 $("#hidden_item_id").val($( ui.draggable.element).arrt('id'));
Chạy tạm ổn, có time sẽ bắt case cho nó đúng logic 1 chút nữa o Join to group để nhận đc những cái "hay ho" yes Mà quái thật, bên phpgroup mình cũng chỉ ngồi nhìn (toàn pro nên chỉ biết ngồi nhìn người ta thảo luận, ứ phát biểu được câu nào o). Dù sao thì....rolleyes Bla bla...mệt...Ngủ đã. awww awww awww zzz zzz zzz zzz