2009-06-03 26 views
5

Tôi đang làm việc trên một số mã AJAX cũ, được viết trong những ngày đen tối trước jQuery. Kỳ lạ thay, nó đã hoạt động tốt trong nhiều năm, cho đến ngày hôm nay khi nó đột nhiên ngừng bắn gọi lại. Dưới đây là các mã cơ bản:Điều gì có thể khiến XMLHttpRequest không bao giờ thay đổi trạng thái trong Firefox?

var xml = new XMLHttpRequest(); // only needs to support Firefox 
xml.open("GET", myRequestURL, true); 
xml.onreadystatechange = function() { alert ('test'); }; 
xml.send(null); 

Kiểm tra Firebug console, các yêu cầu đã được gửi đi với không phải lo lắng, và nó được nhận XML đúng từ URL yêu cầu, nhưng onreadystatechange chức năng không hoạt động gì cả. Không có lỗi javascript hoặc bất cứ điều gì khác lạ xảy ra trong hệ thống.

Tôi ước tôi có thể viết lại mọi thứ bằng jQuery, nhưng tôi không có thời gian ngay bây giờ. Điều gì có thể gây ra vấn đề này?


Cập nhật thêm - Tôi có thể kiểm tra mã của mình trong trình duyệt khác (FFx 3.0) và đang hoạt động ở đó, vì vậy nó phải là vấn đề với trình duyệt của tôi. Tôi đang chạy Firefox 3.5b4 trên Vista, và tôi đã thử nó ngay bây giờ với tất cả các addons của tôi bị vô hiệu hóa mà không có may mắn. Nó vẫn thực sự bugging tôi bởi vì tôi đã làm việc trên trang web này ngày hôm qua (với cùng một thiết lập trình duyệt) và không có vấn đề gì cả ...

Thực ra tôi vừa nhìn lại cửa sổ Addons và thấy rằng Firebug là vẫn được bật. Nếu tôi vô hiệu hóa Firebug, nó hoạt động hoàn hảo. Nếu tôi bật nó, nó bị hỏng. Firebug phiên bản 1.40.a31

+0

Bạn đang sử dụng phiên bản Firefox nào? Có thể đó là lỗi của Firefox? Tôi không nhận được cùng một bãi như bạn làm trong Firebug. –

+0

xem chỉnh sửa của tôi. đó là một lỗi trong firefox 3.5beta4 có vẻ như –

+0

Tôi sẽ không ngạc nhiên nếu trình duyệt BETA có lỗi. ;) –

Trả lời

4

là url không đúng định dạng? bạn đã thử đặt toàn bộ nội dung vào một lần thử và cảnh báo lỗi (nếu có)

là nó không kiểm tra ủy quyền? url có liên quan yêu cầu http-auth? (Mặc dù cần có thay đổi trạng thái trong trường hợp này, tôi sẽ thừa)

chỉnh sửa:

Tôi có một ý nghĩ thực sự hài hước ở đây. Bạn đang sử dụng firefox 3.5 beta4? Tôi phát triển một phần mở rộng firefox cho một trò chơi dựa trên trình duyệt và gần đây phát hiện ra một số behvaviour lẻ. Với phần mở rộng của tôi hoặc firebug quan sát các yêu cầu ajax được thực hiện từ trang, kịch bản ccreating chúng sẽ không bao giờ nhận được gọi lại. Yêu cầu sẽ được quan sát và xử lý chính xác bởi cả firebug và phần mở rộng của tôi (tôi có thể quan sát những gì đã được gửi và nhận) ... nhưng bản thân trang sẽ không bao giờ nghe thấy từ yêu cầu nữa - giống như nó biến mất thành một lỗ đen.

Hãy thử tắt firebug (hoặc ít nhất là tắt nghe 'Net' cho tên miền đó) và thử nghiệm nó một lần nữa

0

Có vẻ như không chắc rằng onreadystatechange sẽ ngừng hoạt động. Có thể chức năng 'cảnh báo' đã bị vô hiệu hóa hoặc bị ghi đè không? Bạn có thể thay thế cảnh báo bằng một số mã để thực hiện thay đổi hiển thị trong trang và kiểm tra chức năng của nó theo cách đó không? (Tôi biết, nó là một căng, nhưng nó chỉ có vẻ rất lạ rằng onreadystatechange sẽ không hoạt động!)

+0

vâng, tôi đã thử đặt cảnh báo ("foo") trên dòng trước khi onreadystatechange và hoạt động tốt. – nickf

+0

nếu onreadystatechange không hoạt động, tôi nghĩ web sẽ sụp đổ. có thể đối tượng XmlHttpRequest đang bị xóa hoặc hủy bỏ trước khi phản hồi quay lại? Có nhiều mã repro hơn hay là những gì bạn thể hiện toàn bộ? Có lẽ cài đặt firefox của bạn bị hỏng? * grin * – Bruce

+0

nếu tên miền được yêu cầu không được tìm thấy, sẽ không có sự thay đổi trạng thái, nhưng có * nên * là lỗi được ném –

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