我想发送ajaxrequest,但首先我必须从chrome.storage.sync获得3个值。这是一个异步函数,因此我无法将其推送到变量并发送请求。
我想做这样的事情(我知道这是异步的,所以我无法得到变量)
var a;
var b;
var c;
chrome.storage.sync.get("a", function(callback){
a = callback.a;
});
chrome.storage.sync.get("b", function(callback){
b = callback.b;
});
chrome.storage.sync.get("c", function(callback){
c = callback.c;
});
function sendwithajax (url) {
var info = {
aa: a,
bb: b,
cc: c
}
return $.ajax({
method: "GET",
url: url,
data: {data:info}
})
}
答案 0 :(得分:1)
如果仔细观察StorageArea docs,您会发现第一个参数可能是:
字符串或字符串或对象数组
要获取的单个键,要获取的键列表或指定默认值的字典(请参阅对象的说明)。空列表或对象将返回空结果对象。传入null以获取存储的全部内容。
这意味着您可以传递所需的字符串键数组:
chrome.storage.sync.get(["a", "b", "c"], function(items){
a = items.a;
b = items.b;
c = items.c;
});
要获取所有存储的值,只需传递null
即可。
答案 1 :(得分:1)
首先,正如@Deliaz指出的那样,你可以一次性获得所有3个参数。如果这些项目尚不存在,您还应该将其与设置默认值的能力结合起来。
此外,在代码中的某处,您需要提供等待直到返回存储的值,因为对storage.get的调用是异步的。实际上,上面的代码将在检索到a,b或c之前完成并继续下一行。如果你期望下一行是
sendwithajax("some url");
它不会起作用,因为a,b和c还不可用。
通常,您应该如何构建代码:
function sendDataWithAjax(url) {
chrome.storage.sync.get({"a": "", "b": "", "c": ""}, function (result) {
var info = {
aa: result.a,
bb: result.b,
cc: result.c
};
sendwithajax(url, info, process);
});
}
function sendwithajax(url, info, callback) {
$.ajax({
method: "GET",
url: url,
data: {data: info},
success: callback
});
}
function process(serverResult) {
}
请注意,您无法通过您的方法获得ajax调用的结果:
return $.ajax()
会返回有关ajax对象的内容,而不是结果。结果也会以异步方式返回,因此在我的代码中,只有在中>>从存储和中检索到数据后,才会调用 >> ajax调用已完成。