【问题标题】:jQuery - Block input until after $.getJson is donejQuery - 在 $.getJson 完成之前阻止输入
【发布时间】:2014-12-12 11:18:14
【问题描述】:

我需要确保在接收和处理 json 数据之前阻止所有用户输入。我在某处读到我可以使用 Defered 对象执行此操作,但它似乎不起作用。 我的代码:

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();
    });
}

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

【问题讨论】:

  • 我不认为它会解决任何问题,但是为什么要使用 PHP 来回显一个简单的字符串呢? message: '&lt;h4&gt;Please Wait&lt;/h4&gt;' 也会这样做
  • 将解除阻止移动到您现在有 alert(j) 的位置
  • @TouPye,没有理由。我有一些其他代码需要 php,但我在发布问题时忘记编辑它。

标签: javascript jquery json synchronize


【解决方案1】:

如果您将unblock() 放入您的getJSON 回调中,它将等到响应:

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

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

【讨论】:

    【解决方案2】:

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

    $.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();
       });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 2022-11-28
      • 1970-01-01
      相关资源
      最近更新 更多