Javascript 将回调传递给匿名函数
我一整天都在和你打交道。“sendResponse”是一个回调函数。因为我处理的是ajax请求,所以我必须在请求后使用它来检索数据。我只是无法将它传递到处理ajax响应的匿名函数中。这里的解决方案是什么Javascript 将回调传递给匿名函数,javascript,ajax,Javascript,Ajax,我一整天都在和你打交道。“sendResponse”是一个回调函数。因为我处理的是ajax请求,所以我必须在请求后使用它来检索数据。我只是无法将它传递到处理ajax响应的匿名函数中。这里的解决方案是什么 runningTimeEntry: function (sendResponse) { TogglButton.ajax('/time_entries/current', { method: 'GET', onLoad: function (x
runningTimeEntry: function (sendResponse) {
TogglButton.ajax('/time_entries/current', {
method: 'GET',
onLoad: function (xhr) {
var responseData = JSON.parse(xhr.responseText);
sendResponse(responseData.data); // this line doesn't work
}
});
},
ajax: function (url, opts) {
var xhr = new XMLHttpRequest(),
method = opts.method || 'GET',
baseUrl = opts.baseUrl || TogglButton.$newApiUrl;
xhr.open(method, baseUrl + url, true);
if (opts.onLoad) {
xhr.addEventListener('load', function () {
opts.onLoad(xhr);
});
}
if (TogglButton.$user) {
xhr.setRequestHeader('Authorization', 'Basic ' + btoa(TogglButton.$user.api_token + ':api_token'));
}
xhr.send(JSON.stringify(opts.payload));
},
简而言之,这将返回{test:“test”}:
但这并不是:
runningTimeEntry: function (sendResponse) {
TogglButton.ajax('/time_entries/current', {
method: 'GET',
onLoad: function (xhr) {
sendResponse({
test: 'test'
}); // this line doesn't work
}
});
},
你能把你的代码适当地缩进吗?把它放进你的问题里,你错了
sendResponse
保留在范围内,这就是闭包的用途。如果您在那里遇到异常,那么错误一定在其他地方。您遇到的错误是什么?请具体说明出现了什么问题。在第一种情况下,您将立即调用sendResponse
,而不是将其分配给onLoad
。至于第二种情况,可能还有其他一些不在javascript中的错误。这是我第一次修改chrome扩展。第一个问题是,background.js脚本没有向页面控制台报告错误,而是向特殊屏幕报告错误。第二个问题是,根本没有错误。经过广泛的挖掘,答案是:javascript中的异步。谢谢你的帮助。
runningTimeEntry: function (sendResponse) {
TogglButton.ajax('/time_entries/current', {
method: 'GET',
onLoad: function (xhr) {
sendResponse({
test: 'test'
}); // this line doesn't work
}
});
},