我需要确保所有用户输入都被阻止,直到收到并处理了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();
});
}
有时屏幕会在警报出现之前解锁。有什么想法吗?
答案 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();
});