从chrome.storage.sync.get获取更多价值



我想发送一个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即可。

最新更新