【发布时间】:2016-02-28 18:42:02
【问题描述】:
我正在制作一个 phonegap 应用程序,它通过 ajax 从外部服务器读取 json 数据。我需要在 sqlite 数据库中加载和保存数据。本机 sqlite 生成一个回调函数错误,我在 stackoverflow 上询问过该错误,但没有得到任何答案。然后我决定使用 sqlite 插件,但是当我在我的应用程序中使用它时,ajax 中定义的错误函数会执行。没有插件,它工作得很好。请告诉我如何在没有任何错误的情况下使用带有或不带有插件的 sqlite。这是我正在使用的代码:
var DB = window.sqlitePlugin.openDatabase({name: "Posts_DB.db"});
var BASE_URI = "https://public-api.wordpress.com/rest/v1.1/sites/smushbits.com/";
var POST_OFFSET = 0;
function getPosts() {
$.mobile.loading('show');
$.ajax({
url: BASE_URI + "posts",
type: "GET",
dataType: "json",
data: {
"number": 10,
"offset": POST_OFFSET,
"order": "DESC"
},
error: function() {
alert("An error occured.");
},
success: function(response) {
$.each(response.posts, function(index, data) {
$('<li><a href="#single" data-transition="slide" id="'+data.ID+'"><h1>'+data.title+'</h1><p>'+getDays(data.date)+'</p></a></li>').appendTo('#latest-list');
$(document).on("click", "#"+data.ID, function() {
showPost(data.title, data.date, data.content, data.URL);
});
});
$('#latest-list').listview('refresh');
$.mobile.loading("hide");
}
});
POST_OFFSET+=10;
}
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
$(document).ready( function() {
DB.transaction(createTableDB, errorCB, successCB);
getPosts();
});
}
function createTableDB(tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS Posts(id INTEGER PRIMARY KEY AUTOINCREMENT, Title TEXT NOT NULL, Date TEXT NOT NULL, Content TEXT NOT NULL, Link TEXT NOT NULL)');
}
function populateDB(tx) {
var title = document.getElementById('entry-title').innerHTML;
var date = document.getElementById('entry-date').innerHTML;
var content = document.getElementById('entry').innerHTML;
var url = document.getElementById('browser').getAttribute('href');
tx.executeSql('INSERT INTO Posts(Title,Date,Content,Link) VALUES(?,?,?,?)', [title, date, content, url] );
}
function errorCB(err) {
alert("Error processing SQL: "+err.message);
}
function successCB() {
DB.transaction(queryDB, errorCB);
}
function queryDB(tx){
tx.executeSql('SELECT * FROM Posts', [], querySuccess, errorCB);
}
function querySuccess(tx,result){
$('#saved-articles-list').empty();
for( var index = 0; index < result.rows.length; index++) {
var row = result.rows.item(index);
$('#saved-articles-list').append('<li><a id="'+row['id']+'" data-transition="slide" href="#single"><h1 class="ui-li-heading">'+row['Title']+'</h1><p class="ui-li-desc">'+getDays(row['Date'])+'</p></a></li>');
$(document).on("click", row['id'], function() {
showPost(row['Title'], row['Date'], row['Content'], row['Link']);
});
}
$('#saved-articles-list').listview("refresh");
}
Config.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<widget xmlns = "http://www.w3.org/ns/widgets"
xmlns:gap = "http://phonegap.com/ns/1.0"
xmlns:android = "http://schemas.android.com/apk/res/android"
id = "com.smushbits.app"
versionCode = "10"
version = "1.0.0" >
<!-- versionCode is optional and Android only -->
<name>TestApp</name>
<description>
Test app
</description>
<author href="https://smushbits.com/about" email="xyz@gmail.com">
Vishal Singh
</author>
<access origin="*" />
<platform name="android" >
<preference name="orientation" value="portrait" />
<preference name="fullscreen" value="true" />
</platform>
<feature name="http://api.phonegap.com/1.0/network" />
<plugin name="com.indigoway.cordova.whitelist.whitelistplugin" source="pgb" />
<plugin name="cordova-plugin-inappbrowser" spec="1.1.0" />
<plugin name="io.litehelpers.cordova.sqlite" spec="0.7.10" source="pgb" />
<plugin name="cordova-plugin-x-socialsharing" spec="5.0.7" />
<allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
<allow-navigation href="data:*" />
<allow-intent href="*" />
<icon src="icon.png" />
<splash src="splash.png" />
</widget>
索引.html:
<!DOCTYPE html>
<html>
<head>
<title>SmushBits</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" type="text/css" href="css/jquery.mobile.min.css" >
<link rel="stylesheet" type="text/css" href="css/app.css" >
<script src="js/jquery.min.js"></script>
<script src="js/jquery.mobile.min.js"></script>
<script src="js/app.js"></script>
<script src="phonegap.js"></script>
</head>
<body onload="init()">
<div id="home" data-role="page" data-theme="a">
<div data-role="header" data-position="fixed" data-theme="b">
<a href="#navpanel1" class="ui-btn ui-btn-left ui-corner-all ui-shadow ui-btn-icon-notext ui-icon-bars"></a>
<h1>SmushBits</h1>
<a href="#search" data-transition="slidedown" class="ui-btn ui-btn-right ui-corner-all ui-shadow ui-btn-icon-notext ui-icon-search"></a>
</div>
<div data-role="content">
<ul data-role="listview" id="latest-list">
</ul>
</div>
</div>
<div id="single" data-role="page" data-theme="a">
<div data-role="header" data-position="fixed" data-theme="b">
<a href="#navpanel5" class="ui-btn ui-btn-left ui-corner-all ui-shadow ui-btn-icon-notext ui-icon-bars"></a>
<h1>SmushBits</h1>
<a href="#search" data-transition="slidedown" class="ui-btn ui-btn-right ui-corner-all ui-shadow ui-btn-icon-notext ui-icon-search"></a>
</div>
<div data-role="content">
<h1 id="entry-title"></h1>
<div id="save-complete"></div>
<h4 id="entry-date"></h4>
<div data-role="controlgroup" data-type="horizontal">
<a id="save-post" class="ui-btn ui-icon-heart">Save</a><a id="share" class="ui-btn ui-icon-star">Share</a><a href="" id="browser" class="ui-btn ui-icon-navigation">Browse</a></div>
<div id="entry"></div>
</div>
</div>
<div id="saved-articles" data-role="page" data-theme="a">
<div data-role="header" data-position="fixed" data-theme="b">
<a href="#navpanel4" class="ui-btn ui-btn-left ui-corner-all ui-shadow ui-btn-icon-notext ui-icon-bars"></a>
<h1>SmushBits</h1>
<a href="#search" data-transition="slidedown" class="ui-btn ui-btn-right ui-corner-all ui-shadow ui-btn-icon-notext ui-icon-search"></a>
</div>
<div data-role="content">
<ul data-role="listview" id="saved-articles-list" data-split-icon="delete">
</ul>
</div>
</div>
</body>
</html>
【问题讨论】:
标签: javascript jquery sqlite cordova