如何在ajax调用中返回值?

时间:2011-11-26 20:29:55

标签: javascript jquery ajax

我希望输入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;
})

2 个答案:

答案 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); 
          }    

        }
    });

}