function retrieve_Data() {
$.ajax({
url: "http://192.168.1.186/json_android/getItemData.php",
jsonpCallback: 'item',
contentType: "application/json",
dataType: 'jsonp',
beforeSend: function() {
$.mobile.showPageLoadingMsg();
},
success: function(data) {
console.log(data);
var markup = "";
$.each(data.list, function(i, elem) {
dbInsert(elem['itemCode'], elem['description'], elem['price']);
});
$.mobile.hidePageLoadingMsg();
},
error: function(request, error) {
alert(error);
}
});
}
function dbInsert(itemCode, description, price) {
var sqlTxt = "INSERT INTO ITEMS (itemCode,description,price ) VALUES (?,?,?)";
db.transaction(
function(tx) {
tx.executeSql(sqlTxt, [itemCode, description, price]);
}, errorCB);
}
function queryDB(callback) {
var sqlTxt = "SELECT * FROM ITEMS";
db.transaction(
function(tx) {
tx.executeSql(sqlTxt, [],
function(tx, results) {
console.log("Length is" + results.rows.length);
var item_Codes = [];
for (var i = 0; i < results.rows.length; i++) {
item_Codes.push({item_code: results.rows.item(i).itemCode, description: results.rows.item(i).description, price: results.rows.item(i).price});
}
callback(item_Codes);
})
, errorCB;
});
return false;
}
我的jquery文件中有3个方法.retrieve,insert和querydb。每个函数都能正常工作。一旦检索函数调用它就会从服务器获取数据并保存在数据库中。当querydb运行时,它将获取所有值从db并保存在一个数组中。当我单独运行每个方法时它工作正常。但我需要运行另一个这些方法。
答案 0 :(得分:0)
实际上,你的所有方法都很好,这就是为什么当你单独执行它们时它们运行得很好的原因。
问题实际上是在ajax调用中,当你通过ajax调用Web服务时,控件在ajax给出响应之前进入函数。所以当你调用retrieve_Data()方法时,它通过ajax调用webservice,在它获得响应之前,你的函数retrieve_Data已经结束,这就是为什么没有调用dbInsert方法,结果你无法得到你想要的结果。
现在是解决方案的时候,你应该使用setTimeout方法。它将等待5000毫秒,之后您的方法将结束。
function retrieve_Data() {
$.ajax({
url: "http://192.168.1.186/json_android/getItemData.php",
jsonpCallback: 'item',
contentType: "application/json",
dataType: 'jsonp',
beforeSend: function() {
$.mobile.showPageLoadingMsg();
},
success: function(data) {
console.log(data);
var markup = "";
$.each(data.list, function(i, elem) {
dbInsert(elem['itemCode'], elem['description'], elem['price']);
});
$.mobile.hidePageLoadingMsg();
},
error: function(request, error) {
alert(error);
}
});
setTimeout(function(){
console.log("Wait for Webservice Response");
},5000);
}
希望它能解决你的问题。