Php jQuery没有';直到.load()的回调中的.ajax()完成为止?
我的问题是带有jQuery进度条(Php jQuery没有';直到.load()的回调中的.ajax()完成为止?,php,jquery,ajax,Php,Jquery,Ajax,我的问题是带有jQuery进度条(dnc_scriber.html)的在所有其他请求完成之前不会加载 这有什么关系吗?我想将#tabs-1的内容更改为进度条,并在dnc#u scriber.php工作时设置动画 lines.php和progress.php文件用于计算dnc_scriber.php完成的工作百分比,该百分比会随着会话的进行而更新lines.php和files.php返回会话变量 $('#tabs-1').load('dnc_scrubber.html', function() {
dnc_scriber.html
)的
在所有其他请求完成之前不会加载
这有什么关系吗?我想将#tabs-1
的内容更改为进度条,并在dnc#u scriber.php
工作时设置动画
lines.php
和progress.php
文件用于计算dnc_scriber.php
完成的工作百分比,该百分比会随着会话的进行而更新lines.php
和files.php
返回会话变量
$('#tabs-1').load('dnc_scrubber.html', function() {
var querystring = 'col=' + col + '&' + makeQS(files);
var lines = 0;
$('#progressbar').progressbar();
$.ajax({
url: 'dnc_scrubber.php',
type: 'POST',
async: true,
data: querystring,
complete: function() {
for (i = 0; i < files.length; i++) {
$('#complete').append('<a href="process/MATCHED - ' + files[i] + '">MATCHED - ' + files[i] + '</a><br />');
$('#complete').append('<a href="process/SCRUBBED - ' + files[i] + '">SCRUBBED - ' + files[i] + '</a><br />');
}
}
});
$.ajax({
url: 'lines.php',
async: true,
dataType: 'json',
complete: function(json) {
lines = json.total;
}
});
function setProgress() {
if (prog < lines) {
prog = getProgress();
$('#progressbar').progressbar('option', 'value', prog);
setTimeout(setProgress(), 1000)
} else {
$('#progressbar').progressbar('option', 'value', 100);
}
}
var prog = getProgress();
setTimeout(setProgress(), 1000);
});
$('tabs-1').load('dnc#u scriber.html',function(){
变量querystring='col='+col+'&'+makeQS(文件);
var线=0;
$('#progressbar').progressbar();
$.ajax({
url:'dnc_scruber.php',
键入:“POST”,
async:true,
数据:查询字符串,
完成:函数(){
对于(i=0;i ');
$('#complete')。追加('
');
}
}
});
$.ajax({
url:'lines.php',
async:true,
数据类型:“json”,
完成:函数(json){
lines=json.total;
}
});
函数setProgress(){
如果(程序<行){
prog=getProgress();
$('progressbar')。progressbar('option','value',prog);
setTimeout(setProgress(),1000)
}否则{
$('progressbar')。progressbar('option','value',100);
}
}
var prog=getProgress();
setTimeout(setProgress(),1000);
});
我已经尝试在.ajax()
请求的回调函数中加载进度条,并将async
设置为false
。同样的结果也会发生-在完成dnc#u scriber.php之前,进度条不会加载到#tabs-1
我能做什么?好的,我盯着这个看了一会儿,它似乎有很多问题。把它作为一个答案,因为它太大,评论
setTimeout(函数(){setProgress();},1000)代码>
function getProgress() {
var lines = 0;
$.ajax({
url: 'progress.php',
async: false,
data: '{}',
dataType: 'json',
success: function(json) {
lines = json.total;
}
});
return lines;// should be 0 to 100 to show progress percent
};
complete:
而不是success:
-即使出现错误,也可以完成流程,但success不会,并且不会在完整函数中捕获错误data:'{}',
?这对我来说是一个疯狂的假设,因为你没有列出你的makeQS()
函数数据:{},
success: function() {
var fileLength = files.length;//assumes files does not change, keeps loop from a lookup on every loop.
for (var i = 0; i < fileLength; i++) {
var myMatch = 'MATCHED - ' + files[i];//better string handling - do one time only
var myScrub = 'SCRUBBED - ' + files[i];
$('#complete').append('<a href="process/' + myMatch + '">' + myMatch + '</a><br />');
$('#complete').append('<a href="process/' + myScrub + '">' + myScrub + '</a><br />');
}
}
success:function(){
var fileLength=files.length;//假定文件不更改,则在每个循环上保留一个查找循环。
对于(var i=0;i ');
$('#complete')。追加('
');
}
}
您知道什么是同步和异步请求吗?您是否尝试过使用success:而不是complete?“我认为这会让每个人都像他们一样处理,而不是等待所有人。”Markschultheis只是尝试了一下,没有change@MarkSchultheiss
success
发生在complete
之前,它们的行为应该是相同的。有关详细信息,请参阅我的答案,但底线是setTimeout(setProgress(),1000)
的语法不正确。谢谢@MarkSchultheiss。诚然,我是一个JavaScript/jQueryNoob,并且已经更正了您指出的所有示例。通常,我主要从事服务器端和数据库处理。然而,今天早上我在查看代码后解决的原始问题。。。似乎getProgress()
有一个$.ajax()
调用async:false
。它解决了这个问题。如果您感兴趣,在这个SO线程中讨论了关于这个项目的更多内容:我想知道这是否是真的,这会停止处理(正如我上面介绍的代码所示)。