user1785625
user1785625

Reputation: 1

phonegap $.ajax()

anyone know how to store the jsonp data from server in phonegap local database?

the code below can help to connect the phonegap android app to the server, but how to store the data in the phonegap local database?

$.ajax({
    url: 'http://172.18.75.156/deals.php',
    dataType: 'jsonp',
    jsonp: 'jsoncallback',
    timeout: 5000,
    success: function(data, status){
        $.each(data, function(i,item){ 
            output.text('successful');
        });
    },
    error: function(){
       output.text('There was an error loading the data.');
    }
});

Upvotes: 0

Views: 751

Answers (6)

Arnold Parge
Arnold Parge

Reputation: 6867

I would suggest you to convert the object to string then save it in the localStorage.

To retrieve data, get the string from localStorage and convert it into JSON object

HTML5 localStorage

Upvotes: 0

Badrush
Badrush

Reputation: 1287

Use an array to store the data from the JSON import. Then save the array to local storage.

$.ajax({
url: 'http://172.18.75.156/deals.php',
dataType: 'jsonp',
jsonp: 'jsoncallback',
timeout: 5000,
success: function(data, status){
    var ArrayName = []; 
    $.each(data, function(i,item){ 
        output.text('successful');
        ArrayName[i] = item;
    });
    localStorage.setItem("jsontable",ArrayName);
},
error: function(){
   output.text('There was an error loading the data.');
}
});

Then you can call that array using localStorage.GetItem("jsontable");

Then the user will be able to use the imported json table array without having to reimport.

Upvotes: 0

yehyaawad
yehyaawad

Reputation: 126

I made a basic database controller class for this kind of thing a long time ago, managed to find it, hopefully it'll give you an idea.

Once you place the DataBaseCtrl code somewhere you'll be able to use it like this:

var myDatabase = DataBaseCtrl();
myDatabase.initWithConfig("DBShortName", "1.0", "MyDbName", 10000);
myDataBase.executeSql("SQL commands here...");

In your case, depending on how your data looks like you would set up your tables

myDataBase.executeSql("CREATE TABLE IF NOT EXISTS LOGS (id unique, log)");
myDataBase.executeSql("INSERT INTO LOGS (id, log) VALUES (1, 'foobar')");
myDataBase.executeSql("INSERT INTO LOGS (id, log) VALUES (2, 'logmsg')");

And maybe then use a loop to get all your data in:

for (i = 0; i < data.length; i += 1) {
    myDataBase.executeSql("INSERT INTO LOGS (id, log) VALUES ("+i+", "+data[i]+")");
}

Here's the rest of the methods

    myDataBase.init(); // uses set/default config
    myDataBase.initWithConfig(shortName, version, displayName, maxSize);
    myDataBase.executeSql(SqlCmmndString);
    myDataBase.executeSqlWithCallBack(SqlCmmndString,SuccessCallbackfunction); // how you get data out
    myDataBase.setInitConfig(shortName, version, displayName, maxSize);

This is the class code:

 var DataBaseCtrl = function () {

    if (!(this instanceof DataBaseCtrl)) {
        return new DataBaseCtrl();
    }

    // Transaction error callback
    function errorCB(tx, err) {
        console.log("Error processing SQL: " + tx + tx.code + tx.message);
    }

    function successCB(tx, err) {
    }

    return {
        _DB: null,
        _config: {
            // Default configuration
            _shortName: "DefaultDataBaseName",
            _version: "1.0",
            _displayName: "DisplayName",
            _maxSize: 65535 // in MBs
        },
        /* Initializer */
        init: function () {
            if (!window.openDatabase) {
                alert("Databases are not supported on this device. \n\n ");
                return false;
            }

            var cfg = {
                shrt: this._config._shortName,
                vers: this._config._version,
                disp: this._config._displayName,
                mxSz: this._config._maxSize
            };
            // Initialize the DataBase.
            this._DB = window.openDatabase(cfg.shrt, cfg.vers, cfg.disp, cfg.mxSz);
        },
        /* Initialize with custom config */
        initWithConfig: function (shortName, version, displayName, maxSize) {
            this.setInitConfig(shortName, version, displayName, maxSize);
            this.init();
        },
        /* Execute SQL command */
        executeSql: function (SqlCmmnd) {
            this._DB.transaction(function (tx) {
                console.log("Executing SQL... " + SqlCmmnd.substring(0, 100));
                tx.executeSql(SqlCmmnd);
            }, errorCB, successCB);
        },
        /* Execute SQL with success callback */
        executeSqlWithCallBack: function (SqlCmmnd, SuccessCallback) {
            this._DB.transaction(function (tx) {
                console.log("Executing SQL... " + SqlCmmnd.substring(0, 100));
                tx.executeSql(SqlCmmnd, [], SuccessCallback);
            }, errorCB, successCB);
        },
        /* Sets init config (call before initializing) */
        setInitConfig: function (shortName, version, displayName, maxSize) {
            console.log("Setting DB Config: " + displayName);
            this._config = {
                _shortName: shortName,
                _version: version,
                _displayName: displayName,
                _maxSize: maxSize
            };
        }
    };
}; 

Upvotes: 0

olore
olore

Reputation: 4857

Check out HTML5's local storage.

PhoneGap's docs for it here:

Upvotes: 0

Anjaney Mishra
Anjaney Mishra

Reputation: 141

Try like this hope this will work:

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
    db = window.openDatabase("SQL", 3, "PhoneGap Demo", 200000);
    db.transaction(ajex_call, success, errorCB);
}
function ajex_call(tx) {
    tx.executeSql('DROP TABLE IF EXISTS table_name');
    tx.executeSql('CREATE TABLE IF NOT EXISTS table_name (fields_required_for_table)');
    $.ajax({ url: 'http://172.18.75.156/deals.php', dataType: 'jsonp', jsonp: 'jsoncallback', timeout: 5000, success: function(data, status){
        $.each(data, function(i,item){
            tx.executeSql("INSERT OR REPLACE INTO table-name(table-fields) values(?,?,..)")
        });
    }, error: function(){
        output.text('There was an error loading the data.');
    } 
}); 
}

function success(){
    console.log('Success');
}
function error(){
    console.log('error');
}

Upvotes: 1

user1903089
user1903089

Reputation:

  db = window.openDatabase("SQL", 3, "PhoneGap Demo", 200000);

db.transaction(ajex_call, errorCB);

    function ajex_call(tx) {
$.ajax({
url: 'http://172.18.75.156/deals.php',
dataType: 'jsonp',
jsonp: 'jsoncallback',
timeout: 5000,
success: function(data, status){
    $.each(data, function(i,item){ 
    //item.obj
        tx.executeSql("INSERT OR REPLACE INTO table-name(table-fields) values(?,?,..)",               [array-data])
    });
       },
error: function(){
   output.text('There was an error loading the data.');
}
});
}

More information for local database http://docs.phonegap.com/en/2.2.0/cordova_storage_storage.md.html

Upvotes: 1

Related Questions