1

phonegapでアプリを作成しています。データベースを操作するために、小さな jquery とこのプラグインhtml5sql.com/を使用します。私のプログラムは奇妙な順序で実行されます。コードにいくつかのアラートを入れ、デバイスでアプリを起動したときに表示される番号を付けて、それぞれの後ろにコメントを書きました。上から下に実行されない理由を知っている人はいますか?

global.js で

  • 新しいオブジェクト「ステーション」を作成できる関数を作成しました
  • 3 つの ID (relID) を持つ配列を作成しました

    var station = function(id) {
        this.id = id;
    };
    
    var relID=new Array();
    relID[0]=2762378;
    relID[1]=2746459;
    relID[2]=2748307;

index.js で

  • relID 配列をパラメーターとして dbStuff() を呼び出します
  • 戻り値を変数に保存します
  • 返された配列の最初のオブジェクトのブランド プロパティを警告します (もちろん、現時点では未定義であるため、コメントとして - しかし、これはコードが機能するときに実行したいことです)
var app = {

    initialize: function() {
        this.bindEvents();
        alert('vor dbStuff() aufruf');//1-----
        var relStations=dbStuff(relID);
        alert('nach dbStuff() aufruf');//6-----
        //alert(relStations[0].brand); ---UNDEFINED---
    },
    ...phonegap stuff...

loaddb.js で

  • 関数「dbStuff()」を作成しました。これは次のようにする必要があります。
  • 新しい/開いているデータベースを作成し、何かを書き込みます
  • そのデータベースから読み取り、それらの値をステーション オブジェクトに書き込みます (relID[] ごとに)
  • すべての駅オブジェクトを配列に入れて返します
function dbStuff(relID) {   
    //NEW ARRAY WHERE ALL STATION OBJECTS WILL BE SAVED  
    var relStations=[];

    alert('dbStuff() neues Array erstellt');//2-----

    //OPEN DATABASE AND WRITE DATA INTO
    try {
    html5sql.openDatabase("stations", "stations", 5 * 1024 * 1024);

    alert('open DB');//3-----

    $.get('js/db/stations.sql', function(dump) {

        alert('sbStuff() dump geladen');//7-----

        html5sql.process(
            dump, 
            function() { //Success
                alert('dump success');
            },
            function(error, failingQuery) { //Failure
                alert('dump fail'); //14-----
            }
        );

    });
    }
    catch (error) {
        alert("Error: " + error.message);
    }

    //GET DATA FROM DATABASE AND WRITE IT IN A STATION OBJECT
    //(FOR EACH ID IN 'relID' ARRAY)
    //FILL 'relStations' ARRAY WITH THE STATION OBJECTS AND RETURN IT
    for(var i=0; i<relID.length; i++){

        var stationa=new station(relID[i]);

        alert('dbStuff()-for neues station Objekt erstellt');//4-----

        //ARRAY WITH SQL STATEMENTS 
        var sqlarray = [
            {"sql" : "SELECT latitude FROM stations WHERE id=" + relID[i],
            "data" : [],
            "success" : function (tx, rs) {stationa.latitude=rs.rows.item(0).latitude;alert('SQL lat');//8-----
            }
            },
            {"sql" : "SELECT longitude FROM stations WHERE id=" + relID[i],
            "data" : [],
            "success" : function (tx, rs) {stationa.longitude=rs.rows.item(0).longitude;alert('SQL long');//9-----
            }
            },
            {"sql" : "SELECT brand FROM stations WHERE id=" + relID[i],
            "data" : [],
            "success" : function (tx, rs) {stationa.brand=rs.rows.item(0).brand;alert('SQL brand');//10-----
            }
             },
             {"sql" : "SELECT name FROM stations WHERE id=" + relID[i],
             "data" : [],
             "success" : function (tx, rs) {stationa.name=rs.rows.item(0).name;alert('SQL name');//11-----
             }
             },
             {"sql" : "SELECT federalstate FROM stations WHERE id=" + relID[i],
             "data" : [],
             "success" : function (tx, rs) {stationa.federalstate=rs.rows.item(0).federalstate;alert('SQL federalstate');//12-----
             }
             }
         ];

        try {html5sql.process(
            sqlarray,
             function () { //Success 
                 //alert('lat: ' + stationa.latitude + ', long: ' + stationa.longitude + ', brand: ' + stationa.brand + ', name:' + stationa.name + ', fedeeralstate:' + stationa.federalstate);
                 relStations[i]=stationa;
                 alert('Array füllen');//13-----
                 //alert(relStations[i].brand);
             },
             function () { //Failure
                alert('SQL FAIL');
             });}
             catch(error) {
            alert("Error: " + error.message);
        }

    }
    alert('return relStations'); //5-----
    return relStations;
}
4

1 に答える 1