2010-09-23 86 views
0

我想在我的JavasSript函数的“背景”中创建一个AJAX请求,但是我的脚本在它继续执行我的代码之前等待AJAX​​请求完成。jQuery:如何进行AJAX请求并继续而不等待请求完成?

$('div').hide(); 

$.get('/controller/action', { id: 'abc123' }, 
    function(data){ 
     //request completed 
     //now update the div with the new data 
     $('div').html(data); 
    } 
); 

$('div').slideDown('slow'); 

//by now hopefully the div has been updated 
//and the user hasn't waited too long 

的问题是,所述slideDown动画等待执行,直到请求返回的响应。我怎样才能让动画与ajax请求同时执行?

+0

嗯。你想要执行的代码在哪里?它在“请求已完成”功能中?或者它是在$('div')之后。slideDown('slow'); ? – DashK 2010-09-24 00:06:45

+1

您的代码有效...... http://jsfiddle.net/pgG9J/ – chriszero 2010-09-24 09:03:40

回答

4

您的代码应该已经在“在后台”(异步)执行Ajax请求。该jQuery.get()方法的简写:

$.ajax({ 
    url: url, 
    data: data, 
    success: success, 
    dataType: dataType 
}); 

而且jQuery.ajax()方法是async: true默认。

+0

问题是动画等待执行,直到请求返回响应。 – Andrew 2010-09-24 04:34:08

+0

@Andrew:这很奇怪。你可以尝试使用'$ .ajax'而不是'$ .get'并设置'async:true'? – 2010-09-24 04:48:23

1

slideDown()在成功回调

$('div').hide(); 

$.get('/controller/action', { id: 'abc123' }, 
    function(data){ 
     alert("Request completed"); 
     //now update the div with the new data 
     $('div').slideDown('slow'); 
    } 
); 

除非你对AJAX提供默认的配置与async: falsedoc)。

+0

问题是动画等待执行,直到请求返回响应。通过将动画放入回调中,它肯定会等待请求完成。我正在尝试提出请求并同时运行动画。 – Andrew 2010-09-24 04:36:09

0

是否有可能div没有包含任何东西,直到ajax请求完成,并因此创建它的等待的幻觉?

您是否在ajax请求之后尝试了良好的旧警报()调试?

+0

是,显示警报,然后在警报上单击确定后,动画继续。 – Andrew 2010-09-27 18:26:10

+0

因此ajax请求可能不会阻止动画,而是直到ajax请求完成,由于缺少div中的内容,动画只是不可见? – Patrick 2010-09-29 08:49:51