Jquery ';sendResponse';从background.js函数到外部页面的数据
我有一个外部页面,它向我的Chrome扩展发送消息,后台脚本获取消息并响应它。但是,我想首先处理函数getID(),然后才将响应(带有ID)发送回外部页面。 我已经尝试:设置一个Jquery ';sendResponse';从background.js函数到外部页面的数据,jquery,google-chrome-extension,Jquery,Google Chrome Extension,我有一个外部页面,它向我的Chrome扩展发送消息,后台脚本获取消息并响应它。但是,我想首先处理函数getID(),然后才将响应(带有ID)发送回外部页面。 我已经尝试:设置一个$.when()和一个setTimeout来等待getID。但是什么都不起作用,而且响应总是“未定义” 是否要等待函数执行,然后才将ID发送回外部页面 外部页面(发送消息) 背景脚本 var id; function getID(){ $.get("url1", function( data1 ) {
$.when()
和一个setTimeout
来等待getID。但是什么都不起作用,而且响应总是“未定义”
是否要等待函数执行,然后才将ID发送回外部页面
外部页面(发送消息)
背景脚本
var id;
function getID(){
$.get("url1", function( data1 ) {
//process data1 and use part of data1 on next get
$.get("url2", function( data2 ) {
//process data2 and use part of data2 on next get
$.get("url3", function( data3 ) {
//process data3 and return
return id;
});
});
});
}
chrome.runtime.onMessageExternal.addListener(
function(request, sender, sendResponse) {
getID();
sendResponse({user: id});
});
你。请先阅读该问题,然后再继续
您需要在最后一次回调中调用sendResponse(id)
。此外,您还可以通过从处理程序返回true
function getID(callback){
$.get("url1", function( data1 ) {
//process data1 and use part of data1 on next get
$.get("url2", function( data2 ) {
//process data2 and use part of data2 on next get
$.get("url3", function( data3 ) {
//process data3 and pass the result to callback
callback(id);
});
});
});
}
chrome.runtime.onMessageExternal.addListener(function(request, sender, sendResponse) {
getID(function(id) {
// Will be called asynchronously from getID()
sendResponse({user: id});
});
return true; // Tell Chrome we need sendResponse asynchronously
});
你。请先阅读该问题,然后再继续
您需要在最后一次回调中调用sendResponse(id)
。此外,您还可以通过从处理程序返回true
function getID(callback){
$.get("url1", function( data1 ) {
//process data1 and use part of data1 on next get
$.get("url2", function( data2 ) {
//process data2 and use part of data2 on next get
$.get("url3", function( data3 ) {
//process data3 and pass the result to callback
callback(id);
});
});
});
}
chrome.runtime.onMessageExternal.addListener(function(request, sender, sendResponse) {
getID(function(id) {
// Will be called asynchronously from getID()
sendResponse({user: id});
});
return true; // Tell Chrome we need sendResponse asynchronously
});
id
仍将是未定义的
?id
不会存储在任何全局变量中,它只传递给回调函数。您可以将其分配给某个对象,但因为所有内容都是异步的,所以在使用它时需要小心。如果您还不太了解这一点,我建议您使用。id
仍然是未定义的
?id
不会存储在任何全局变量中,它只传递给回调。您可以将其分配给某个对象,但因为所有内容都是异步的,所以在使用它时需要小心。我建议你,如果你还不太明白的话。