当jQuery ajax在进程中调用时,屏幕不会刷新

时间:2013-05-15 16:44:48

标签: jquery ajax

我有两个可能(或可能不)相关的屏幕刷新问题。我可以清楚地重现的那个涉及进行一系列的ajax调用。在每次调用之间,我在jQuery对话框中更新文本以显示进度。在过程结束时,我隐藏了对话框。

当我使用调试面板在Chrome中运行此代码并在每次ajax调用之前或之后放置断点时,对话框会正确更新。如果我只是让代码运行而不会破坏,屏幕根本不会刷新。

我已尝试在每次ajax调用之间引入等待循环,但这并不能解决问题。以下是代码的已编辑版本:

$('#saving').show();
$('#savingSpan').text('Saving Analysis');
$('#savingReport').text('Saving Header: ');
$('#savingInputs').text('Saving Inputs: ');
$('#savingResults').text('Saving Results: ');
$('#savingComplete').text('Doing Cleanup: ');

wait(250);
$('#savingReport').append('Started...');
var status = saveReport();
$('#savingReport').append('Complete.');
wait(250);
$('#savingInputs').append('Started....');
status = saveInputs();
$('#savingInputs').append('Complete.');
wait(250);
$('#savingResults').append('Started....');
status = saveResults();
$('#savingResults').append('Complete.');
wait(250);
$('#savingComplete').append('Started....');
status = saveComplete();
$('#savingComplete').append('Complete.');
$('#saving').hide();

另一个问题是,当我的页面最初加载时,它的主要部分是空白的,直到我在页面的该部分上运行鼠标。然后我运行鼠标的区域显示正确。

1 个答案:

答案 0 :(得分:1)

您需要等待ajax调用完成。下面的代码模拟了一个ajax调用:

var foo = 1;

setTimeout(function(){
    foo = 2;
}, 250);

console.log(foo); //1

你需要的是一个回调函数,以确保ajax调用完成:

function ajaxDemo(success){

    setTimeout(function(){

        foo = 2;
        success;

    }, 250);
}

var foo = 1;

ajaxDemo(function(){

    console.log(foo);
});

由于您使用jQuery标记了问题,因此您可以执行以下操作(假设版本为> = 1.5):

var ajaxCall1 = $.ajax({ /* ... your ajax code ... */ }),
    ajaxCall2 = $.ajax({ /* ... your ajax code ... */ }),
    ajaxCall3 = $.ajax({ /* ... your ajax code ... */ });

$.when(ajaxCall1, ajaxCall2, ajaxCall3).then(function(d1, d2, d3){
      console.log(d1); //data from first ajax call
      console.log(d2); //data from second ajax call
      //etc...
}).fail(function() {
      console.log('something went wrong in at least one of the ajax calls');
});

希望这会有所帮助。如果您有任何问题,请告诉我。