2010-08-02 22 views
1

函数使用jquery.ajax()方法从服务器获取数据并将其用作返回值。 如果我使用async = true该函数提前返回空值。 如果我使用async = false等待该功能太长。我在请求之前尝试了显示旋转时钟的切换div,但在请求结束之前div才会出现。如何在使用jQuery进行同步请求时阻止浏览器锁定(或显示等待符号)?

有关如何不锁定浏览器或显示等待图标/符号/文本的任何建议?

+2

'async = true'请求有什么问题?你能告诉我们你的代码吗? – 2010-08-02 04:33:43

+0

这是1000行代码:) Async true过早返回,并且后续函数获取空对象 – selytch 2010-08-02 07:09:39

+0

[在(同步)Ajax期间停止浏览器锁定?](http://stackoverflow.com/questions/9755485/stop-浏览器锁定在同步ajax) – 2016-10-26 09:20:52

回答

2

你不能。同步请求会锁定浏览器,包括您可能要做的任何动画或可能正在进行修改的动画 - 这就是为什么他们不鼓励。机会是,你试图从函数中返回一个值,从ajax请求发出,这对异步请求不起作用 - 修改你的逻辑来处理成功回调中的响应处理,并且所有的都会很好...

+0

jquery处理来自PHP mysql查询的异步响应的任何好资源? – selytch 2010-08-02 07:08:16

+0

@selytch:它不是特定于PHP或MySQL的;这就是异步调用必须处理的方式:在调用需要从回调触发后,你想要发生的一切。请参阅:http://stackoverflow.com/questions/2851952/jquery-ajax-function-to-call-php-script-which-returns-a-value或http://stackoverflow.com/questions/31129/how- can-i-return-a-variable-from-a-getjson-function或http://stackoverflow.com/questions/402503/ajax-return-data-not-working-in-jquery ... – Shog9 2010-08-02 15:51:50

1

对于未锁定浏览器,您应该使用异步请求,也许您的代码或ajax响应需要重构。

但是,如果你还没有想使用异步请求,你可以做这样的事情:

  1. 插入旋转时钟显示
  2. 当准备好(我是指一个回调),使AJAX要求
  3. 最后,除去时钟
+0

服务器响应与JSON对象,我明白(纠正我,如果我错了),需要SYNC。如果我把$('#wait')。show('fast',function(){$ .ajax ....})作为参数传递给数组,浏览器(Chrome)在请求完成前仍拒绝显示#wait。 – selytch 2010-08-02 05:05:07

+0

我用默认的异步模式多次使用json。我不明白为什么它需要同步。 – Keyo 2010-08-02 05:53:51

1

一个办法是把图像(载入中... GIF动画)。在发送ajax之前显示它。然后在成功时隐藏它。就像下面一样。

$.ajax({ 
    url: 'ajax/test.html', 
    beforeSend : function(){ 
    $('#LodingImg').show(); // show image.. 
    }, 
    success: function(data) { 
    $('#LodingImg').hide(); // hide image 
    $('.result').html(data); 
    alert('Load was performed.'); 
    } 
}); 
+0

不起作用。也许这是Google Chrome的问题? – selytch 2010-08-02 05:05:35

+0

你能在上面的帖子中包含你的代码示例吗... – Reigel 2010-08-02 05:21:30

相关问题