Javascript 如何在ajax调用中返回值?
如果数据为Javascript 如何在ajax调用中返回值?,javascript,jquery,ajax,Javascript,Jquery,Ajax,如果数据为0,我想在输入中输入keyup后返回false,如果不是false,返回为true。但在我的try中,如果数据===0,则始终返回为真: $('input').live('keyup change', function () { var result = true; $.ajax({ type: 'POST', dataType: 'json', url: 'search_customer', data:
0,我想在输入中输入keyup
后返回false,如果不是false,返回为true。但在我的try中,如果数据===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;
})
.ajax()
调用在将来的任意时间返回。keyup
和change
处理程序立即返回(基本上)
在success
处理程序中完成工作。或者,您可以将一个全局(或名称空间的全局)设置为返回的值,但要知道在Ajax调用完成之前它是无效的
如果if
语句本身没有达到预期效果,您还需要确保返回的数据是您预期的数据。这与事件处理程序的返回值不同。调用.ajax()
会在将来的任意时间返回。keyup
和change
处理程序立即返回(基本上)
在success
处理程序中完成工作。或者,您可以将一个全局(或名称空间的全局)设置为返回的值,但要知道在Ajax调用完成之前它是无效的
如果if
语句本身没有达到预期效果,您还需要确保返回的数据是您预期的数据。这与事件处理程序的返回值不同。我看到您选择了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作为答案,但有一种更好的方法——使用回调函数
$('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);
}
}
});
}
添加以下内容:success:function(data){alert(data);
并告诉我们resultalert(result)将始终返回true,因为.ajax()是异步的。为什么要在此处返回某些内容。它有什么用途?返回值不会在任何地方处理。如果要处理数据,则可以从success
函数中直接调用处理程序……添加以下内容:success:function(data){alert(data);
并告诉我们resultalert(result)将始终返回true,因为.ajax()是异步的。为什么要在此处返回某些内容。它有什么用途?返回值不会在任何地方处理。如果要处理数据,则可以从success
函数中直接调用处理程序……这与在success函数中写入数据处理程序不一样吗?这只会调用在成功时执行另一个调用的函数。这不是阻塞
意味着什么?我无法正确理解。以前接受的答案(已删除)建议使用async:false,它会阻止其他请求。我的答案是响应该建议。当然,如果有意义的话,您可以在这个函数中编写处理程序。这是一个更模块化的过程。这与在success函数中编写数据处理程序不一样吗?这将只调用执行另一个函数的函数er呼叫成功。这不是阻塞
意味着什么?我无法正确理解。以前接受的答案(已删除)建议使用async:false,它会阻止其他请求。我的答案是响应该建议。当然,如果有意义,您可以在该函数中编写处理程序。这是一个更模块化的方法。