2017-11-24 9 views
1

私はajaxrequestを送信したいと思いますが、まずchrome.storage.syncから3つの値を取得する必要があります。これは非同期関数なので、変数をプッシュしてリクエストを送信することはできません。chrome.storage.sync.getからさらに価値を得る

私はこのような何か(私はこれが非同期である知っているので、私は変数を取得することはできません)をしたいと思っ

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} 
     }) 
} 

答えて

1

あなたはStorageArea docsをよく見ると、あなたは最初のパラメータがかもしれないことがわかりますである:

文字列または文字列またはオブジェクト

単一kのアレイ取得するキーのリスト、またはデフォルト値を指定する辞書(オブジェクトの説明を参照)。空のリストまたはオブジェクトは、空の結果オブジェクトを返します。 nullを渡すと、ストレージの内容全体が取得されます。

だから、あなたが必要な文字列キーの配列を渡すことができることを意味:

chrome.storage.sync.get(["a", "b", "c"], function(items){ 
    a = items.a; 
    b = items.b; 
    c = items.c; 
}); 

すべて格納されている値を取得するためには、ちょうどnullを渡します。

1

まず、@Deliazが指摘したように、3つのパラメータすべてをワンショットで取得できます。これらのアイテムがまだ存在しない場合は、デフォルトを設定する機能と組み合わせてください。

また、コードのどこかでstorage.getの呼び出しが非同期であるため、格納された値が返されるまで待機する必要があります。そのままでは、上記のコードは終了し、a、b、またはcが検索される前に次の行に進みます。あなたは次の行が

sendwithajax("some url"); 

であることを期待していた場合はa、b、cはまだ利用できないでしょうので、それは動作しません。

これは、あなたのコードを構造化する方法を一般的にです:あなたはあなたの方法のいずれかにより、AJAX呼び出しの結果を得ることができない

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) { 

} 

注:

return $.ajax() 

約何かを返しますajaxオブジェクトであり、結果ではありません。結果はまた非同期的に戻ってくるので、私のコードでは、の後に関数のプロセスはと呼ばれ、データはストレージから検索され、ajax呼び出しが完了します。

関連する問題