Comments

hunter1986.myopenid.com 2
over 2 years ago

Mình là Dũng, mình mới mò mẫn tìm hiểu về Ajax thôi, tuy nhiên gặp 1 lỗi mà không làm thế nào fix được, mong được lời khuyên của ai đó.. vấn đề của mình là: nếu như viết ajax  với webserver là tomcat  để gọi 1 trang  .jsp chẳng hạn thì mọi chuyện diễn ra  êm đẹp, ví dụ trang jsp đó, bạn có thể tạo 1 luồng ra như sau:

response.setHeader("Cache-Control", "no-cache");

double i= java.lang.Math.random()*1000;

response.getWriter.write(i);

thì kết quả trả về cho đối tượng XMLHttp là giá trị ngẫu nhiên của biến i. Bây giờ mình viết 1 vòng lặp gọi hàm với javascript sao cho trang web liên tục yêu cầu trang jsp liên tục trả về giá trị ngãu nhiên khác của biến i thì  tomcat hoạt động ok, cả khi webserver và web broser cùng trên 1 máy hay là 2 máy khác nhau. Đến đây chưa có gì phải bản cãi. Nhưng khi mình sử dụng webServer tự viết bằng java  sử dụng ServerSocket , tất nhiên lúc này không thể sử dụng luồng ra của response nữa mà phải sử dụng chính luồng outputStream của ServerSocket.thì vấn đề như sau: nếu browser và webserver trên 2 máy mạng Lan khác nhau thì vẫn hoạt động ok như  đối với trình chủ tomcat và trang jsp. nhưng webserver và browser trên cùng 1 máy thì   ajax chỉ hoạt động được đúng 1 lần nghĩa là giá trị của biến i, vẫn không thay đổi trong các vòng lặp tiếp theo. Ngoài ra nếu sử dụng Browser là ie thì sẽ có thêm 1 thông báo lỗi trước khi ajax thực hiện lệnh open("get","url",true) của nó là:  "this page is accessing information that is not under its control. This poses a security risk. Do you want to continue" ... mình đã cố tìm điểm khác biệt giữa 2 luồng ra của ServerSocket và luồng ra từ đối tượng PrintWriter của response.getWriter = cách sử dụng wireshark hoặc ethereal nhưng thấy kết quả tương đối giống nhau, thậm chí có thể bắt chiếc cho giống nhau. (luồng ra ở đây ý nói : protocol và kết quả trả về từ webserver --> browser) . vấn đề của mình chỉ nhỏ thế thôi, nhưng trong project của mình thì nó chiếm phần khá quan trọng ,mong được cao thủ giúp đỡ..

ngocdaothanh.myopenid.com 149
over 2 years ago

Đã dùng đến wireshark hoặc ethereal để kiểm tra mà không thấy output của web server khác nhau, thì chắc vấn đề không nằm ở đây. Tuy nhiên bạn thử kiểm tra lại các kí tự xuống dòng của output xem sao.

IE báo như vậy thì có thể bạn đang dùng cross-domain, ví dụ trang .html là trang tĩnh C:/tmp/x.html, nhưng lại đòi truy cập đến http://localhost:8080/ chẳng hạn.

hunter1986.myopenid.com 2
over 2 years ago

   Cảm ơn bạn Ngọc đã góp ý.. tuy nhiên mình đã test khá nhiều, vấn đề cross-domain không phải, vì mình trang .html được gọi từ localhost, ví dụ: http://localhost:8080/testAjax.htm

   hơn nữa nếu là cross-domain thì sau khi ấn yes,thì thông thường hoặc là chương trình không hoạt động luôn, hoặc là vẫn hoạt động bình thường.. đằng này đối tượng XMLHTTP được server trả về được lần đầu tiên,còn lần thứ 2 trở đi mới bị hỏng.. quái đản ở chỗ, có vài lần nó lại hoạt động tốt trong 3,4 vòng lặp đầu tiên hahaha , thế mới bó tay. còn ký từ xuống dòng của output thì có lẽ cũng khong hợp lý lắm vì ,sử dụng wireshark để đo 2 server của mình và tomcat thì cho 2 gói giống hệt nhau :D..

  Hy vọng được đóng góp thêm 1 vài ý kiến hợac cho 1 lời khuyên về sử dụng công nghệ khác ngoài ajax cũng được hìhì:P

ngocdaothanh.myopenid.com 149
Updated over 2 years ago

Nếu vậy rất rất có thể chương trình client side bị bug. Nên dùng Firebug để tự mò, hoặc hãy cho mọi người xem mã chương trình client side để mò giúp (nếu ngắn thì dùng nút C trên thanh công cụ, dài thì dùng tính năng gởi tập tin).

pokemon5gam.myopenid.com 1
over 2 years ago

Theo tôi có thể cái webserver của bạn hoạt động không đúng cách .

Bạn thử một vài phương án sau đây xem .

1.Chạy domain thay vì localhost bằng cách cài DNS server hoặc đơn giản là sửa file host

2.Nếu chạy trên IE , thử turn off cái alert kia đi

Internet Options>>Local intranet zone>>Custom Level>>Miscellaneous>>Access data sources across domains>>Enable

hunter1986.myopenid.com 2
over 2 years ago

    chương trình của mình bản chất của nó là 1 ứng dụng desktop nhưng chạy trên giao diện web, do vậy phải sử dụng code server tự tạo và hoạt động trên localhost chứ không dùng DNS , thực ra chạy trên localhost thì cả ie lẫn firefox hay 1 trình duệt khác là advance cũng không hoạt động tốt như nhau... (nhưng  nếu chạy trên 2 máy khác nhau thì hoạt động tốt,tuy nhiên đó lại không phải là mục đích của dự án) .ie có tắt alert đi thì vẫn lỗi là ajax không hoạt động trong các vòng lặp tiếp theo.

    Nếu dùng firebug thì nó đưa ra lỗi như sau: uncaught exception: Permission denied to call method XMLHttpRequest.open

    Phía client  về cơ bản nó  ần có dòng lệnh sau:

        xmlHttp.open("GET","localhost:9999/~HTTPServerRoomAjax/",true);
        xmlHttp.send(null);
        setTimeout("ajaxFunction()",6000);

Giải thích: đối tượng xmlHTTP gọi địa chỉ ảo ~HTTPServerRoomAjax/  ..bởi lẽ gọi nó là địa chỉ ảo vì nó chỉ là cái tên để cho webserver của mình xử lý.mỗi khi trang web yêu cầu địa chỉ trên, webserver sẽ trả về 1 biến đếm với giá trị tăng dần... nếu ta đặt host= localhost:9999 thì chỉ có webbrowser tren localhost có thể truy cập, máy mạng Lan thì không (tất nhiên) thay vào đó nếu  ta muốn thử nghiệm trên 1 máy thứ 2 thì ở hàm trên ta phải thay host= địa chỉ tĩnh của máy chạy webserver vd: 192.168.1.102:9999... sau đây là những kết quả mà tớ đã thử nghiệm và chả kết quả nào giống kết quả nào hihi

th1: computer1: chạy localwebserver và IE browser:  kết quả trả về biến đém 0 , các vòng lặp tiếp theo, vẫn trả về biến đếm 0

th2: computer1: chạy local webserver và FireFox browser: không hiển thị kết quả và thông báo lỗi: Permission denied to call method XMLHttpRequest.open (firebug)

th3: computer2: chạy local webserver va IE browser: giống th1

th4: computer2: chạy local webserver và firefox browser: hoạt động tốt, mỗi vòng lặp trả về 1 giá trị tăng dần 1-->.....

th5: computer1 chạy webserver, (sửa code host-->192.168.1.102:9999 là địa chỉ tĩnh của máy 1) computer2 chạy browser bất kì --> hoạt động tốt, các biến đếm tiếp tục tăng

th6: làm ngược lại th5 cũng cho hoạt động  tốt

đó là những gì mình thử trên 2 computer và cho nhưng kết quả chả hiểu ra là sao cả.. thực ra vấn đề này không còn quan trọng,nhưng giá mà được giải đáp thắc mắc thì mình thấy thoải mái hơn hì

mình có gửi code phần client, các bạn chỉ xem tham khảo vì code này phải kết hợp với webserver mới hoàn chỉnh.

You must login to be able to comment

Uploaded files
Name Size Uploader Time
gui.rar 1 KB
hunter1986.myopenid.com 2
10 months ago

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content