作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我在谷歌闭包中有一个客户端错误日志记录模块,它可以跟踪所有客户端错误。这些错误存储在队列中。这个想法是弹出一个新错误并存储在队列中,并在一定时间后将其发送到服务器并清空队列。但在我的代码中,回调函数并不代表模型的正确实例。
goog.provide('model.ErrorLogger');
/**
* @constructor
*/
model.ErrorLogger = function() {
window.onerror = goog.bind(this.somefucntion() this);
};
goog.addSingletonGetter(model.ErrorLogger);
model.ErrorLogger.prototype.errors = [];
有一个方法负责存储错误
model.ErrorLogger.prototype.notify = function(err){
this.errors.push(err);
this.sendReport();
}
该方法将队列中的错误发送到服务器
model.ErrorLogger.prototype.sendReport = function(){
dataModel.xhrPost(rid,url,JSON.stringify(this.errors),function(responseData){
this.errors = []; //This error queue should have contents but is showing undefined
});
}
因此,当响应返回回调函数时,错误队列在调试时显示未定义而不是显示内容。所以基本上 this should 的值没有被正确存储/传递。基本上,在将错误发送到服务器后,我无法清空错误队列。下次当新错误弹出时,旧错误仍然存在于队列中。
最佳答案
这是正常的,因为您在回调函数中使用的“this”并不指向您的主对象,而是指向您的回调函数你必须像这样绑定(bind)你的回调函数
model.ErrorLogger.prototype.sendReport = function(){
dataModel.xhrPost(rid,url,JSON.stringify(this.errors),(function(responseData){
this.errors = []; //This error queue should have contents but is showing undefined
}).bind(this));
}
或者订阅 xhr 对象触发的完整事件并使用这种方法(更干净)
goog.require('goog.net.XhrIo');
var xhr = new goog.net.XhrIo();
goog.events.listen(xhr, goog.net.EventType.COMPLETE, function(e) {
obj = this.getResponseJson();
// get your response here
}, **false, this**);
xhr.send(url);
更多信息请点击 https://developers.google.com/closure/library/docs/xhrio
关于javascript - XHR 在 Google Closure 中发布时传递此值的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31257882/
我是一名优秀的程序员,十分优秀!