0

ファイルからいくつかの価格をロードする必要があります (サーバーにはデータベースが設定されていません)。

PriceChicken:2.16
PriceRibs:1.84
PriceBrisket:14.00
PricePulledPork:12.00
PriceSides:5.00

次のようなJavaScriptブロック:

var price = {
    "PriceChicken": "1",
    "PriceRibs": "1",
    "PriceBrisket": "1",
    "PricePulledPork": "1",
    "PriceSides": "1"
};

function loadVars(){
    console.log(price["PriceChicken"]);
    $.get("price.txt", function(data){
        dataarray = data.split("\n");
        for(i = 0;i < dataarray.length; i++){
            var line = dataarray[i].split(":");
            console.log(price[line[0]]);
            price[line[0]] = line[1];
            console.log(price[line[0]]);
        }
    });
    console.log(price["PriceChicken"]);
}
loadVars();

残念ながら、 $.get 部分内の関数は、グローバルな価格変数を認識できないようです。
したがって、最初の項目については、1、未宣言、2.16、そして $.get 関数を離れると再び 1 が表示されます。
グローバル変数を機能させるためのより良い方法、またはこの情報を取り込むためのより良い方法はありますか?

編集:私は愚かで、すべての変数をチェックしませんでした。私の苦行として、私はそれを正しい方法で行い、JSON の使い方を学びます。

4

2 に答える 2

3

$.get呼び出しは非同期です。あなたはそれを同期呼び出しとして扱っています。

この行console.log(price["PriceChicken"]);は、ファイルが処理される前に呼び出されます。

JSON 形式を使用することをお勧めします。

価格.json

{
    "PriceChicken" : 2.16,
    "PriceRibs" : 1.84,
    "PriceBrisket" : 14.00,
    "PricePulledPork" : 12.00,
    "PriceSides" : 5.00
}

JavaScript

var price = {};

$.getJSON("prices.json", function(data){ 
    $.extend(price,data); 
});
于 2012-09-28T13:29:27.830 に答える
0
var price = {
    "PriceChicken": "1",
    "PriceRibs": "1",
    "PriceBrisket": "1",
    "PricePulledPork": "1",
    "PriceSides": "1"
};

function set_price(key, value){
    price[key] = value;
};

function loadVars(){
    console.log(price["PriceChicken"]);

    $.get("price.txt", function(data){
        dataarray = data.split("\n");
        for(i = 0;i < dataarray.length; i++){
            var line = dataarray[i].split(":");

            // set price
            set_price(line[0], line[1]);

            console.log(price[line[0]]);
        }
    });

    console.log(price["PriceChicken"]);
}


loadVars();
于 2012-09-28T13:40:15.007 に答える