如何在ajax调用开始之前显示加载消息?

时间:2011-05-06 12:37:54

标签: jquery ajax

$('#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函数提醒某些东西并且它有效,所以我不知道ajax是什么原因不等待背景位置改变....

4 个答案:

答案 0 :(得分:1)

因为你的ajax请求是同步的,而javascript是单线程的,所以它会阻止其他活动。我不确定为什么你的具体情况不起作用,因为我希望立即完成css方法,但我希望它与浏览器实际渲染DOM的具体情况有关,在线程完成之前可能不会发生。

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

答案 1 :(得分:0)

beforeSend(jqXHR, settings)Function

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

答案 2 :(得分:0)

您是否尝试使用beforeSend(jqXHR, settings)函数作为等待背景,error(jqXHR, textStatus, errorThrown)表示错误,如果请求成功,则尝试使用success(data, textStatus, jqXHR)函数?

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

答案 3 :(得分:0)

我遇到了同样的问题,jQuery mobile试图在发送数据之前显示$ .mobile.loading,在我的情况下,它必须同步。有些数据必须先于其他数据上传,所以如果它们全部是异步的,它可能会在插入发生之前发送一些更新记录。我的解决方案是在ajax调用周围的setTimeout,以便我在ajax触发之前显示加载时间。这样做很简单,但是直到他们给我一个回电话给$ .mobile.loading我仍然坚持使用它。