2010-12-28 37 views
7

Tôi gặp sự cố với ứng dụng Java JSF: Trong một trường hợp nhất định, hành động của người dùng gây ra yêu cầu HTTP Ajax cập nhật giao diện người dùng chính xác, nhưng sau đó ngay lập tức yêu cầu thứ hai được kích hoạt, gây ra cập nhật thứ hai, không chính xác.Làm thế nào tôi có thể tìm ra Javascript nào gây ra một yêu cầu Ajax?

Làm cách nào để tìm ra (tốt nhất là sử dụng Firebug) khi yêu cầu thứ hai chính xác được kích hoạt? Có rất nhiều mã JS khuôn khổ được rút gọn, vì vậy tôi không biết nơi đặt các điểm ngắt. Đặt biểu mẫu xử lý onsubmit thành console.trace không giúp được gì, tôi cho rằng vì đây là các yêu cầu Ajax độc lập.

Trả lời

5

Trong khi thử các đề xuất trong câu trả lời, tôi thấy Firebug đã có chính xác những gì tôi cần: hộp Console hiển thị tất cả các yêu cầu, và đối với các yêu cầu Ajax, nó hiển thị tệp và số dòng nơi chúng bắt nguồn, cho tôi biết nơi đặt điểm ngắt của tôi ...

+0

isnt 'được triển khai trong các công cụ dành cho nhà phát triển Chrome không? – eugene

+0

@eugene: khá có thể, vâng. –

+3

Cảm ơn Michael. Đối với bản ghi, nó nằm trong tab Network - Initiator.di chuột qua liên kết và nó sẽ hiển thị ngăn xếp cuộc gọi. – eugene

0

Sử dụng Firebug, bạn có thể đặt Breakpoints on DOM (HTML) Mutation Events nếu bạn có một số thay đổi HTML trong cập nhật giao diện người dùng của mình.

+0

Nhưng điều đó sẽ kích hoạt khi nhận được * phản hồi *, phải không? Tôi cần phải tìm ra nơi * yêu cầu * bắt nguồn. –

+0

Tất nhiên, nhưng nó thu hẹp xuống nơi bạn có thể chọn để bắt đầu gỡ lỗi. Bạn cũng có thể lập hồ sơ yêu cầu, phản hồi, chu kỳ cập nhật ui để thu hẹp hoạt động. –

0

Nếu khung làm trừu tượng các yêu cầu AJAX, bạn sẽ có thể theo dõi các cuộc gọi đến các tóm tắt. Ví dụ, jQuery cho phép điều này thông qua global AJAX event handlers của nó.

Cách khác, mạnh mẽ hơn để giải quyết vấn đề là replace the XHR object và theo dõi cuộc gọi được thực hiện (ví dụ: nếu khung không cung cấp sự trừu tượng ở trên hoặc nếu các cuộc gọi bạn muốn sử dụng không sử dụng trừu tượng) . Chỉ cần thay thế GM_log bằng console.trace trong tập lệnh ở cuối trang và đưa nó vào trang bạn đang thử nghiệm.

0

Điều mà cá nhân tôi đã thực hiện trong trường hợp này là sử dụng proxy HTTP có thể đưa ra yêu cầu hoặc phản hồi 'bị giữ'. Ví dụ. Burp Proxy(đây thực sự là một công cụ bảo mật, nhưng nó hoạt động tốt cho mục đích gỡ lỗi)

Khởi động proxy và định cấu hình trình duyệt của bạn để sử dụng nó. Điều hướng đến trang nơi yêu cầu roque bắt nguồn từ và kích hoạt yêu cầu chặn (điều này có thể mất một số thực hành như Burp Proxy có thể là một công cụ khá phức tạp).

Bây giờ, hãy thực hiện tác vụ người dùng, nếu mọi việc suôn sẻ, proxy chặn và đợi xác nhận của bạn để cho phép nó đi qua. Làm cái này. Sau đó, bạn có thể sẽ thấy yêu cầu thứ hai đến và bị chặn bởi proxy. Đừng để điều này thông qua, nhưng thay vì chuyển sang Firebug và tạm dừng vào trình gỡ rối. Hy vọng rằng bạn sẽ có thể nhìn thấy nó bắt nguồn từ đâu. Chỉnh sửa: trên suy nghĩ thứ hai, bản chất không đồng bộ của AJAX có thể có nghĩa là bạn sẽ không thể xem chính xác vị trí nào thông qua phương thức này… :(

Ít nhất bạn cũng có thể định cấu hình để chặn phản hồi. cả hai yêu cầu và phản ứng có thể được chỉnh sửa một cách nhanh chóng, có thể là tuyệt vời cho thử nghiệm và gỡ lỗi và có thể giúp đỡ trong việc thu hẹp vấn đề.

0

có thể điều này sẽ giúp đỡ, gọi là một phương pháp trong đối tượng Chức năng của javascript.

console.log (arguments.callee.caller.toString());

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