如何在ajax调用中返回值?
如果数据为0
,我希望在输入keyup
后返回假如果不是假返回为真。但在我尝试总是返回是万一data === 0
真:如何在ajax调用中返回值?
$('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;
})
在未来任意时间.ajax()
调用返回。 keyup
和change
处理程序立即返回(基本上)。
在您的success
处理程序中执行此项工作。或者,您可以将全局(或名称空间全局)设置为返回值,但要理解,在Ajax调用完成之前它将无效。
如果if
声明本身不符合您的期望,您还需要确保所返回的数据是您期望的数据。这与事件处理程序的返回值不同。
是的,它工作正常,我从数据输出0。 –
我发现你选择了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);
}
}
});
}
是不是这样写成功函数内的数据处理程序?这只会调用成功执行另一个调用的函数。 “这不是阻塞”是什么意思?我无法正确理解它。 –
先前接受的答案(已删除)建议使用async:false,它会阻止其他请求。我的回答是回应那个建议。当然,如果有意义的话,你可以在这个函数中写入处理程序。这是更加模块化的。 – ScottE
补充一点:'成功:功能(数据){警报(数据);',告诉我们什么是结果 –
警报(结果),因为阿贾克斯将始终返回true()是异步。 – malletjo
结果'data'为0. –