gpt4 book ai didi

javascript - XHR 在 Google Closure 中发布时传递此值的正确方法

转载 作者:行者123 更新时间:2023-12-03 09:38:28 25 4
gpt4 key购买 nike

所以我在谷歌闭包中有一个客户端错误日志记录模块,它可以跟踪所有客户端错误。这些错误存储在队列中。这个想法是弹出一个新错误并存储在队列中,并在一定时间后将其发送到服务器并清空队列。但在我的代码中,回调函数并不代表模型的正确实例。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com