更新了我的问题
我制作了一个用户可以导入大量数据的脚本。提交表单并验证数据后,我添加了2个后台任务:1是导入所有数据的脚本。该脚本还允许数据库知道总数和已完成的数量。第二个是一个脚本,它读取从数据库中完成的工作量并将其显示在一个很好的进度条中。
代码:
$.ajax({
type: "GET",
url: "import-process.php",
success: function(data) {}
});
var process = 0;
var checkPercentage = function() {
$.ajax({
type: "GET",
url: "get-process-status.php",
data: "importcode=123456",
success: function(data) {
if (!data.indexOf("ERROR") !== -1) {
process = data;
$("#process_balk").css('width', process + '%');
}
}
});
if (process != 100) {
setTimeout(checkPercentage, 1000);
} else {
window.location.href = "import-finished.php";
}
}
checkPercentage();
这两个脚本都运行正常。除了第一个脚本(获取进程的状态)在第一个(导入数据)完成后没有启动。这使得完整的事情变得毫无用处。
任何想法如何解决这个问题?
更新 我发现后台进程只被调用一次。那就是问题所在。我只是不确定如何解决它..
var checkPercentage = function() {
alert("Is this function getting called every second?");
$.ajax({
type: "GET",
async: true,
url: "required/get-process-status.php",
data: "importcode=123456",
success: function(data) {
alert(data);
}
});
setTimeout(checkPercentage, 1000);
}
上面的代码警告“这个函数每秒都被调用一次吗?”每一秒。喜欢它应该。但是,值'data'只调用一次。这不是我的预期......有什么想法吗?
答案 0 :(得分:0)
你的意思是这样的?:
$.ajax({
type: "GET",
url: "import-process.php",
success: function(data) {
checkPercentage();
}
});
var process = 0;
var checkPercentage = function() {
$.ajax({
type: "GET",
url: "get-process-status.php",
data: "importcode=123456",
success: function(data) {
if (!data.indexOf("ERROR") !== -1) {
process = data;
$("#process_balk").css('width', process + '%');
}
}
});
if (process != 100) {
setTimeout(checkPercentage, 1000);
} else {
window.location.href = "import-finished.php";
}
}
我刚刚将checkPercantage函数调用从脚本结束移动到第一个ajax的success
函数。如果您希望尽管有错误,也可以将其移动到complete
功能。
答案 1 :(得分:0)
将您的回调函数设置为:
success: function(data) {
if (!data.indexOf("ERROR") !== -1) {
process = data;
$("#process_balk").css('width', process + '%');
if (process != 100) {
setInterval(checkPercentage, 1000);
} else {
window.location.href = "import-finished.php";
}
}
}
首先,if语句必须在回调函数中才能按您希望的方式工作。其次,您应该使用setInterval()
代替setTimeout()
,因为它会在每个间隔时间重新检查一次。
另外,yabol说你的代码顶部应该是这样的:
$.ajax({
type: "GET",
url: "import-process.php",
success: function(data) {
checkPercentage();
}
});