推迟窗口.位置为AJAX留出时间
Postponing window.location to allow time for AJAX
我有一个索引页,我想用它来设置一个本地数据库之前移动到另一个页面。然而,每当我有窗口。位置代码没有激活其他函数运行,但是当我注释掉它时,其他函数运行良好。任何想法会导致这一点,以及如何我可以得到这两个函数和窗口。工作地点?代码如下:
<script>
var db = window.openDatabase("DB1", "", "DB", 1024 * 1000)
CreateDB(); //Creates local database tables
loadRouteList(); //Queries web server database using AJAX and inserts Routes
window.location = 'Application.html';
</script>
功能使用:
function CreateDB() {
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS Routes(id INTEGER PRIMARY KEY, routeID TEXT, customerID TEXT, stopSeq TEXT, driverID TEXT)', []);
});
};
function loadRouteList() {
var dataObject = {
postDesignator: 'routes',
};
$.ajax({
url: 'http://url.php',
data: dataObject,
dataType: 'json',
type: 'post',
success: function (Result) {
for (var i = 0, len = Result.records.length; i < len; ++i) {
var route = Result.records[i].record;
insertRoute(route.routeID, null, null, null);
}
}
});
}
使用回调!我修改你的代码:
<script>
var db = window.openDatabase("DB1", "", "DB", 1024 * 1000);
CreateDB(); //Creates local database tables
loadRouteList(function() { window.location = 'Application.html'} );
</script>
功能使用:
function CreateDB() {
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS Routes(id INTEGER PRIMARY KEY, routeID TEXT, customerID TEXT, stopSeq TEXT, driverID TEXT)', []);
});
};
function loadRouteList(callback) {
var dataObject = {
postDesignator: 'routes',
};
$.ajax({
url: 'http://url.php',
data: dataObject,
dataType: 'json',
type: 'post',
success: function (Result) {
for (var i = 0, len = Result.records.length; i < len; ++i) {
var route = Result.records[i].record;
insertRoute(route.routeID, null, null, null);
}
// this is the so called callback, that gets executed AFTER the ajax has finished
if(callback) { callback(); }
}
});
}
根据定义,AJAX是Asynchronous
,所以如果您运行这些函数并且不等待它们完成,那么您的代码将在不等待它们的情况下继续运行。所以你到达了你的位置由于你的直线而改变的点。您必须等到所有的请求都完成后才能继续,要做到这一点,您必须更改函数内部的代码。如果你把它们贴出来,我们可以帮助你。
编辑
在我看来,最好的方法是给你的函数传递一个回调:
function CreateDB() {
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS Routes(id INTEGER PRIMARY KEY, routeID TEXT, customerID TEXT, stopSeq TEXT, driverID TEXT)', []);
});
//if even this piece of code is async you should read docs and check how to call a function after the query executed
};
function loadRouteList(callback) {
var dataObject = {
postDesignator: 'routes',
};
$.ajax({
url: 'http://url.php',
data: dataObject,
dataType: 'json',
type: 'post',
success: function (Result) {
for (var i = 0, len = Result.records.length; i < len; ++i) {
var route = Result.records[i].record;
insertRoute(route.routeID, null, null, null);
}
if(callback) {
callback();
}
}
});
}
然后这样使用:
var db = window.openDatabase("DB1", "", "DB", 1024 * 1000)
CreateDB(); //Creates local database tables
loadRouteList(function() {
window.location = 'Application.html';
});
相关文章:
- 如何设置$.ajax请求的超时,并在超时时间过长时进行重做
- 有没有更好的方法可以测量从Ajax调用返回数据所需的总时间
- AJAX 调用在获得响应并成功执行时会冻结浏览器一段时间
- 为什么这个 AJAX 调用需要这么长时间
- jQuery.ajax,缓存和时间戳
- 获取剩余时间和上传文件速度 - ajax jquery/js
- jQuery setTimeout ajax递归函数在即时消息程序中短时间后抛出错误
- 我如何在jQuery.Ajax中处理时间响应(DataType:JSON)
- 如何在boomrang页面加载时间中添加ajax执行时间
- Ajax jQuery同时进行多个调用-等待应答的时间很长,无法取消
- CodeIgniter在AJAX调用中一段时间后丢失会话
- 为什么我的保存时间功能不起作用?PHP + AJAX JS.
- 如何构建一个在上一个 ajax 承诺解析后等待一段时间的 rx 轮询器
- JavaScript,连续的JS和AJAX函数会随着时间的推移降低页面性能
- for 循环元素的执行时间比内部 AJAX 调用可以响应的要快
- AJAX 发送和接收之间的时间返回负值
- 如何在特定的时间跨度使用 AJAX 检索 php 表单
- 对于 IE 中的 ajax 内容,加载触发时间太早
- AJAX 可访问的长时间运行的服务任务阻止在启用 ASP.NET 兼容性/会话的环境中的后续 AJAX 服务请求
- 时间 ajax 请求