我想发送一个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}
})
}
首先,正如@Deliaz指出的那样,您可以一击获得所有3个参数。您还应该将其与设置默认设置的能力结合在一起。
另外,在您的代码中的某个地方,您需要提供等待,直到返回存储的值,因为拨打了存储,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调用已完成。p>
如果您仔细观察Storagearea文档,您会发现第一个参数可能是:
字符串或object
的字符串或数组要获取的一个键,获取的键列表或指定默认值的字典(请参阅对象的描述)。空列表或对象将返回一个空结果对象。通过零以获取整个存储内容。
这样,这意味着您可以传递需要的字符串键:
chrome.storage.sync.get(["a", "b", "c"], function(items){
a = items.a;
b = items.b;
c = items.c;
});
为了获得所有存储的值,只需通过null
即可。