我希望输入keyup
之后如果数据是0
则返回false,如果不是false则返回true。但在我的尝试中,如果data === 0
:
$('input').live('keyup change', function () {
var result = true;
$.ajax({
type: 'POST',
dataType: 'json',
url: 'search_customer',
data: dataObj,
cache: false,
success: function (data) {
if (data == 0) {
alert('data is 0')
result = false;
} else {
alert('data is not 0')
}
}
})
//alert(result) this output always is 'true'
return result;
})
答案 0 :(得分:4)
.ajax()
调用将来会在任意时间返回。 <{1}}和keyup
处理程序立即返回(基本上)。
在change
处理程序中完成工作。或者,您可以将全局(或命名空间的全局)设置为返回值,并了解在Ajax调用完成之前它将无效。
如果success
语句本身没有达到您的预期,您还需要确保返回的数据符合您的预期。这与事件处理程序的返回值不同。
答案 1 :(得分:1)
我看到你选择了async:false作为答案,但有更好的方法 - 使用回调函数。
$('input').live('keyup change', function () {
DoSomething(function(result) {
// this isn't blocking
});
})
function DoSomething(callback) {
$.ajax({
type: 'POST',
dataType: 'json',
url: 'search_customer',
data: dataObj,
cache: false,
success: function (data) {
var result = data !== 0;
if (typeof callback === 'function') {
callback(result);
}
}
});
}