2011-10-19 13 views
6

मैं एक ऐसे फ़ंक्शन को कॉल करने का प्रयास कर रहा हूं जो मेरे वेब SQL डेटाबेस से मूल्यों को चुनें। मैं चयनित मूल्यों को मूल कार्य के अंदर एक चर में वापस करना चाहता हूं। लेकिन, चर हमेशा रिक्त हो जाता है, गीला यह वैश्विक है या नहीं।वेब एसक्यूएल चयन लेनदेन वापसी मूल्य

जैसा कि आप selectRow फ़ंक्शन के अंदर console.log को देख सकेंगे, डेटाबेस क्वेरी से सही मान लॉग करता है, लेकिन console.log initDB फ़ंक्शन में खाली दिखाई देता है।

मैंने यह भी देखा है कि रिक्त लॉग selectRow फ़ंक्शन के अंदर लॉग से पहले दिखाई देता है। मुझे मंच मिल गए हैं जहां लोग डेटाबेस लेनदेन के बारे में बात कर रहे हैं जो असीमित है। मैं समझता हूं कि यही कारण है कि मेरा चर वापस लौटा रहा है। हालांकि, दीवार के खिलाफ अपने सिर को मारने के बाद कई बार मुझे इस असीमित समस्या के आसपास काम करने का कोई रास्ता नहीं मिल रहा है। क्योंकि आप एक देरी प्रतिक्रिया

/** Initialize Database **/ 
function initDB(){ 
    createTable(); 
    selectRow("SELECT * FROM planets;", function(pleaseWork) { 
    console.log(pleaseWork); 
    // any further processing here 
    }); 
} 

/** Select Row from Table **/ 
function selectRow(query, callBack){ // <-- extra param 
    var result = []; 
    db.transaction(function (tx) { 
     tx.executeSql(query, [], function(tx, rs){ 
     for(var i=0; i<rs.rows.length; i++) { 
      var row = rs.rows.item(i) 
      result[i] = { id: row['id'], 
          name: row['name'] 
      } 
     } 
     console.log(result); 
     callBack(result); // <-- new bit here 
     }, errorHandler); 
    }); 
} 

उत्तर

17

आप एक पैरामीटर है, जो यह परिणाम लौटने के बजाय परिणाम के साथ कॉल करेंगे के रूप में एक कॉलबैक स्वीकार करने के लिए अपने selectRow() समारोह को बदल सकता है groups.google.com/forum/?fromgroups#!topic/phonegap/YCRt2Hdu: आप बदले डेटा से पहले एसक्यूएल प्रतिक्रिया, है यही कारण है कि एक कॉलबैक फ़ंक्शन

+1

बहुत बहुत शुक्रिया। कॉलबैक मेरे लिए एक नई अवधारणा है लेकिन मैं उनके बारे में अधिक जानना सुनिश्चित करूँगा। –

+1

जावास्क्रिप्ट से शुरू होने पर उपयोग करने के लिए कॉलबैक सबसे कठिन अवधारणा है – drinovc

3

इस मुश्किल है:

/** Initialize Database **/ 
function initDB(){ 
    createTable(); 
    var pleaseWork = selectRow("SELECT * FROM planets;"); 
    console.log(pleaseWork); 
} 

/** Select Row from Table **/ 
function selectRow(query){ 
    var result = []; 

    db.transaction(function (tx) { 
    tx.executeSql(query, [], function(tx, rs){ 
     for(var i=0; i<rs.rows.length; i++) { 
     var row = rs.rows.item(i) 
     result[i] = { 
      id: row['id'], 
      name: row['name'] 
     } 
     } 
     console.log(result); 
    }, errorHandler); 
    }); 

    return result; 
} 
0

पारित करने के लिए साइट देखें जरूरत प्रतीक्षा करने की आवश्यकता cKg

function loadUniteSelectListe() { 
db.transaction(function (tx) { 
//populate drop down for unites 
    tx.executeSql('SELECT * FROM Unites', [], function (tx, results) { 
     var len = results.rows.length; 
     var i=0; 
     var txt=""; 
     for (i = 0; i < len; i++){ 
      txt=txt + "<option value="+results.rows.item(i).uniteName + ">" + results.rows.item(i).uniteSymbol + "</option>"; 
     } 
     document.getElementById("filtreUniteSelect").innerHTML=txt; 
    }, null); 
    }); 

}

निम्न HTML से संबंधित:

Unité: <select name="filtreUniteSelect" id="filtreUniteSelect" ></select><br/> 
तालिका के साथ

: एक करता है

CREATE TABLE IF NOT EXISTS Unites (uniteID INTEGER PRIMARY KEY AUTOINCREMENT, uniteName TEXT, uniteSymbol TEXT) 
    tx.executeSql("INSERT INTO Unites(uniteName,uniteSymbol) VALUES(?, ?)", ['heure', 'h']); //fonctionnel un à la fois 
    tx.executeSql("INSERT INTO Unites(uniteName,uniteSymbol) VALUES(?, ?)", ['kilometre', 'km']); //fonctionnel un à la fois 
    tx.executeSql("INSERT INTO Unites(uniteName,uniteSymbol) VALUES(?, ?)", ['dollar', '$']); //fonctionnel un à la fois 

ए +

संबंधित मुद्दे