jQuery - 在$ .getJson完成之后阻止输入

时间:2014-12-12 11:18:14

标签: javascript jquery json synchronize

我需要确保所有用户输入都被阻止,直到收到并处理了json数据。我在某处读到了我可以用Deffered对象做到这一点,但它似乎不起作用。 我的代码:

function checkDTCCardAvailability() {
    var defer = $.Deferred(),
    isAvailable = defer.then(function() {
        $('#pass-search-form').block({
            message: '<h4>Please Wait</h4>',
            css: {
                backgroundColor: '#0192af',
                color: '#f6d200'
            }
        });

        $.getJSON("site_url",{
            city: 'Athens',
            age: 25
        }, function(j) {
            //process data	        
            alert(j);
        }); //JSON call
    });

    defer.resolve();
    isAvailable.done(function() {
        // Enable form		
        $('#pass-search-form').unblock();
    });
}

有时屏幕会在警报出现之前解锁。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果您将unblock()放入getJSON回调中,它会等到回复:

$.getJSON("site_url", {
    city: 'Athens',
    age: 25
}, function (j) {
    //process data          
    alert(j);

    // Enable form      
    $('#pass-search-form').unblock();
}); //JSON call

答案 1 :(得分:0)

这取决于你想要什么,但你可以这样做:

$.getJSON("site_url", {
   city: 'Athens',
   age: 25
})
   .done(function( jsonResp ){
      // Success callback
   })
   .fail(function(){
      // Server error callback
   })
   .always(function(){
      // in all cases
      $('#pass-search-form').unblock();
   });