Archive for the ‘Javascript’ Category

IE message: Operation aborted

Wednesday, November 18th, 2009

Few days ago, I assigned a task to fix a problem: IE showed an error message box and crashed when load a heavy page (it took about 40-50s to load completly) .

I thought, maybe cause of problem is Javascript (syntax error) and I checked whole the page. Hix, nothing happened :( After I Googled, I found the main reason are:

  1. The HTML file is being parsed
  2. Script is executing
  3. The executing script attempts to add, or remove an element from an unclosed ancestor in the markup tree (not including the script block’s immediate parent element).

So I refactored code by move all JS function call into $(document).ready( … ) (I used jQuery) to make sure the script will be excute after the page loaded successful. whew, the problem has been resolved :)

Determining the Number of Days in a Month with Javascript

Sunday, November 1st, 2009

Cuối tuần vừa rồi, bác Cảnh (my leader) có triển khai 1 task cho tôi với nội dung là: “chỉnh lại core của con calendar.js để ngày mặc định khi hiệp popup calendar sẽ là ngày hiện tại cộng một” (dĩ nhiên nếu đã nhập ngày trước đó rồi thì vẫn phải focus đúng).

Rất may là con calendar của tác giả Alf Magne Kalleland đã xử lý việc focus ngày nếu text field đã có giá trị nên việc của tôi lúc này khá nhàn hạ:

- Nếu textfield đã có giá trị rồi thì ko làm gì cả
- Nếu chưa có:
+ Lấy ngày hiện tại & cộng thêm 1 đơn vị
+ Nếu giá trị vừa cộng > tổng số ngày trong tháng hiện tại thì tăng tháng lên 1 đơn vị & ngày hiện tại = 1
+ Nếu tháng vừa cộng > 12 thì tăng năm hiện tại lên 1, ngày & tháng hiện tại = 1

Cái khó ở đây chính việc xác định tổng số ngày trong tháng bằng Javascript. Khó ở đây không phải thuật toán, khó ở đây chỉ đơn giản là làm thế nào để viết…càng ngắn càng tốt.

Nếu làm theo kiểu như trong các sách họp lập trình hoặc trong trường học thì sẽ phải if else (switch case) các tháng 30 ngày (4, 6, 9, 11), tháng có 31 ngày (1, 3, 5, 7, 8, 10, 12) và tháng 2 có 28 ngày (năm nhuận sẽ là 29). Ở đây lại phải xác định năm nhuận là năm như thế nào (chia hết cho 400), dài dòng ghê :p

Đối tượng Date của Javascript cho quá tải tham số date truyền vào & sẽ tự động tính toán số dư ngày thừa ra đó theo ngày hiện tại. Do đó để tính số ngày trong 1 tháng bằng Javascript chỉ cần dùng 1 dòng sau:

?View Code JAVASCRIPT
1
2
3
4
function daysInMonth(iMonth, iYear)
{
    return 32 - new Date(iYear, iMonth, 32).getDate();
}

Keke… vậy là task 1 giờ đã được giải quyết trong vòng chưa đầy 5′. Suỵt, bí mật :D

Source: http://snippets.dzone.com/posts/show/2099

Parse single Javascript object in Jquery by $.ajax method

Tuesday, September 8th, 2009

Chưa thử test với Jquery phiên bản mới nhất, mới chạy trên bản 1.2.1 (dự án hiện tại đang dùng :( ). Khi sử dụng $.ajax như bên dưới thì phát sinh lỗi:

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$.ajax({
	type: "POST",
	url: document.location.href,
	data: "card_type=" + cardType + "&card_number=" + cardNumber,
	dataType: 'JSON',
	cache: false,
	success: function(responses){
	    if(!responses.has_error)
	    {
	 	alert("Please enter valid Card Number.");
	 	return false;
	    }
       }
});

thì bị lỗi. Mặc dù response là {‘has_error’: false;} nhưng lại không nhảy vào khối lệnh IF.
Cách khắc phục rất đơn giản:

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
...
success: function(responses){
    var obj = eval('('+responses+')');
    if(!obj .has_error)
    {
	alert("Please enter valid Card Number.");
	return false;
    }
}

Lưu ý: Chỉ xảy ra lỗi này nếu response là single object, nếu nó là mảng các object thì cứ $.each rồi get theo key, val thì lại ko sao :(

Drag n Drop Islands

Tuesday, January 15th, 2008

Kéo và thả nào :D

Giờ chưa có thời gian viết code cụ thể được, cứ để link demo đã, khi nào rảnh quay lại viết sau :p

http://donamkhanh.com/lab/ajax/drag_n_drop_island

Get Alexa Rank

Monday, December 31st, 2007

Sau mấy hôm làm mấy cái Get Yahoo Avatar, Get Domain, giờ đến thằng Alexa rank.

Thật ra mình muốn làm cái get rank này lâu lắm rồi, từ cái hồi xem cái kết quả này. Nhưng khi bắt tay vào thì gặp khó khăn 1 chút. Alexa “chơi khó” bằng cách sinh ra mấy cái thẻ . Cách này của Alexa hay phết, khi mình copy kết quả rank, paste nó lại ra số linh ta linh tinh. Giờ thì biết tại sao. Nhưng biết là 1 chuyện, làm được lại là 1 chuyện. Googled, thấy quá trời giải pháp. Trong đó có 1 chú cũng giải quyết theo cách của mình (bóc tách, dùng cURL). Nhưng (lại nhưng), Alexa nó có cho tra theo dạng xml thì tại sao lại không dùng nhỉ, bóc tách làm gì cho mệt cơ chứ. Vậy là theo hướng dùng XML

Okie, done!

Demo http://donamkhanh.com/lab/ajax/get_alexa_rank (Alexa chỉ tính rank cho domain chính thôi chứ ko tính cho từng subdomain đâu nha, bác nào nhập blog Yahoo hay Opera thấy rank cao đừng sướng nhá)