2011-02-17 68 views
0

我在项目中使用jQuery BlockUI。对于特定的用户操作,我想阻止UI,然后将数据发送到服务器。当发生超时事件或服务器返回时,我想取消阻止页面。jQuery blockUI和AJAX POST

我似乎无法实现此行为。这是我到目前为止(不工作)

$(document).ready(function(){ 
    $('#test').click(function(event){ 
     $.blockUI({ message: $('#mydiv') }); 

     $.ajax({ 
       type: 'POST', 
       url: 'www.example.com', 
       data: somedata, 
       dataType: "json" 
     }); 

     setTimeout(function() { 
       $.unblockUI({ 
        onUnblock: function(){ 
         alert('onUnblock'); 
        } 
       }); 
      }, 2000); 
}); 

任何人都可以发现我可能做错了什么?

+0

我认为你会阻止你的用户界面,但它永远不会畅通无阻? – Tx3 2011-02-17 07:37:21

回答

4

我想你需要为此设置ajax自己的成功,错误和超时属性。忘记使用其他setTimeout。

这里是文档。

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

更像:

$.ajax({ 
       type: 'POST', 
       url: 'www.example.com', 
       data: somedata, 
       dataType: "json", 
       timeout: /*your time*/, 
       success: function(result){ /*unblock*/ }, 
       error: function (xhr, ajaxOptions, thrownError){ /*unblock*/ } 
     }); 
0

使用完整的回调

$.ajax({ 
      type: 'POST', 
      url: 'www.example.com', 
      data: somedata, 
      dataType: "json", 
      complete: function(){ 
      // unblock stuff here 
      } 
    }); 

成功和完整的区别在于,完全就是所谓的Ajax调用是否成功。如果您只使用成功,那么如果AJAX呼叫失败,UI将保持阻塞状态。

+0

您也可以添加`timeout`属性。 – Don 2011-02-17 07:45:11