Tôi đang cố tạo một tập lệnh sẽ hoạt động như một proxy/trình bao bọc cho đối tượng gốc XMLHttpRequest
cho phép tôi chặn nó, sửa đổi responseText và quay lại sự kiện onreadystatechange gốc.Chặn XMLHttpRequest và sửa đổi responseText
Ngữ cảnh là, nếu dữ liệu ứng dụng đang cố gắng nhận đã có sẵn trong bộ nhớ cục bộ, để hủy bỏ số XMLHttpRequest
và chuyển dữ liệu được lưu trữ cục bộ trở lại phương pháp gọi lại thành công/thất bại của ứng dụng. Giả sử tôi không kiểm soát được các phương thức gọi lại AJAX hiện có của ứng dụng.
Ban đầu tôi đã thử các ý tưởng sau đây ..
var send = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function(data){
//Do some stuff in here to modify the responseText
send.call(this, data);
};
Nhưng bây giờ tôi đã thiết lập, responseText là chỉ đọc.
Sau đó, tôi đã thử thực hiện một bước trở lại, viết proxy riêng đầy đủ của riêng mình đến XMLHttpRequest
, cuối cùng kết thúc bằng văn bản phiên bản của riêng tôi về các phương pháp gốc. Tương tự như những gì được thảo luận ở đây ...
http://www.ilinsky.com/articles/XMLHttpRequest/#implementation-wrapping
Nhưng nó nhanh chóng nhận được khó hiểu, và vẫn có những khó khăn trong việc trả lại dữ liệu biến đổi trở lại vào phương pháp ban đầu onReadyStateChange
.
Mọi đề xuất? Điều này thậm chí có thể?
Điều này là quá mức cần thiết cho những gì tôi cần, nhưng takeaway quan trọng đối với tôi là 'var rawOpen = XMLHttpRequest.prototype.open;' và 'rawOpen.apply (this, arguments);', cho phép tôi cắm vào ghi đè của riêng mình (khi bạn hiển thị) nhưng vẫn cho phép cuộc gọi đi qua như bình thường để người gọi không biết gì khác. –