phonegap $.ajax()



任何人都知道如何在phonegap本地数据库中存储从服务器中存储JSONP数据?

以下代码可以帮助将PhoneGap Android应用程序连接到服务器,但是如何将数据存储在PhoneGap本地数据库中?

$.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.');
    }
});
  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.');
}
});
}

本地数据库的更多信息http://docs.phonegap.com/en/2.2.0/cordova_storage_storage.md.html

尝试这样的希望,这将有效:

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

查看HTML5的本地存储。

PhoneGap的文档在这里:

我很久以前为这种事情做了一个基本的数据库控制器类,设法找到了它,希望它能给您一个想法。

DataBaseCtrl代码放置在某个地方,您将可以这样使用:

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

在您的情况下,取决于您的数据如何设置表

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')");

也许然后使用循环获取所有数据:

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

这是其余方法

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

这是类代码:

 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. nn ");
                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
            };
        }
    };
}; 

使用数组来存储JSON导入的数据。然后将数组保存到本地存储。

$.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.');
}
});

然后您可以使用localStorage.GetItem("jsontable");

调用该数组

然后,用户将能够使用导入的JSON表数组而无需重新登录。

我建议您将对象转换为字符串,然后将其保存在localstorage中。

要检索数据,请从localstorage中获取字符串并将其转换为JSON对象

html5 localstorage

最新更新