2011-05-06 110 views
0
$('#wait').ajaxStart(function(){ 
$(this).css('background-position','0 -90px'); 
}); 
var result = $.ajax({ 
url: "file.php", 
async: false, 
data: ({id:id}), 
type: "post", 
cache: false 
}).responseText; 

#wait div有一个ok,错误和等待图标的背景,我想改变ajax调用星的div的背景位置,但它不工作。我试图提醒从ajaxStart funcion的东西,它的工作,所以我不从什么理由阿贾克斯不会等待后台位置的变化知道....如何在ajax调用开始之前显示加载消息?

+0

您是否尝试过使用异步调用?无论如何,你应该避免同步通话。 – 2011-05-06 12:42:37

+0

我认为没有异步我不能从服务器取回结果 – Csabi 2011-05-06 12:48:02

+0

当然你可以....否则它会是什么意思?你必须设置一个'success'回调,这个回调被调用时将响应作为参数传递。看看jQuery文档,有一些例子。 – 2011-05-06 12:50:45

回答

1

因为你的Ajax请求是同步的,和JavaScript是单线程的,它会阻止其他活动。我不确定为什么你的特定情况不起作用,因为我期望css方法能够立即完成,但我期望它与浏览器实际呈现更新DOM的细节有关,直到线程完成。

但是,一般来说,您可以完全通过使用异步请求来避免此问题。阻止Ajax请求也会产生负面的用户体验,因为UI在发生时已被完全禁用。因此,使用异步请求几乎总是可取的。如果你需要确保页面元素被禁用(例如,有效地模拟同步请求),有很多jquery插件可以轻松完成此操作。我有好运​​:http://jquery.malsup.com/block/

+0

我的问题是,如果我设置异步为真比responseText为空 – Csabi 2011-05-06 13:06:39

+0

它不以同样的方式工作。查看关于原始问题的最新评论。您需要将回调附加到'success'选项。这并不困难,只是不同而已,因为它是异步的。文档http://api.jquery.com/jQuery.ajax/在页面中途有一个简单的例子。 – 2011-05-06 13:09:09

+0

谢谢,这工作! – Csabi 2011-05-06 13:27:05

0

beforeSend(jqXHR, settings)Function

预请求回调函数,可以在发送之前修改jqXHR(在jQuery 1.4.x,XMLHTTPRequest)对象中。使用此设置自定义标题等。jqXHR和设置映射作为参数传递。这是一个Ajax事件。在beforeSend函数中返回false将取消请求。从jQuery 1.5开始,beforeSend选项将被调用,而不管请求的类型如何。

0

您是否尝试过beforeSend(jqXHR, settings)函数用于等待背景,error(jqXHR, textStatus, errorThrown)错误以及success(data, textStatus, jqXHR)函数是否成功?

http://api.jquery.com/jQuery.ajax/

0

我有同样的问题,jQuery手机试图显示$ .mobile.loading之前,我发送数据,在我的情况下,它必须同步。一些数据必须在别人之前上传,所以如果它是全部异步的,它可能会在插入前发送一些更新记录。我的解决方案是围绕ajax调用setTimeout,以便在加载Ajax之前显示加载时间。糟糕的做法,但直到他们给我回电话$ .mobile.loading我坚持使用它。

相关问题