如何在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; 
}) 
+0

补充一点:'成功:功能(数据){警报(数据);',告诉我们什么是结果 –

+0

警报(结果),因为阿贾克斯将始终返回true()是异步。 – malletjo

+0

结果'data'为0. –

在未来任意时间.ajax()调用返回。 keyupchange处理程序立即返回(基本上)。

在您的success处理程序中执行此项工作。或者,您可以将全局(或名称空间全局)设置为返回值,但要理解,在Ajax调用完成之前它将无效。

如果if声明本身不符合您的期望,您还需要确保所返回的数据是您期望的数据。这与事件处理程序的返回值不同。

+0

是的,它工作正常,我从数据输出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); 
      }  

     } 
    }); 

} 
+0

是不是这样写成功函数内的数据处理程序?这只会调用成功执行另一个调用的函数。 “这不是阻塞”是什么意思?我无法正确理解它。 –

+0

先前接受的答案(已删除)建议使用async:false,它会阻止其他请求。我的回答是回应那个建议。当然,如果有意义的话,你可以在这个函数中写入处理程序。这是更加模块化的。 – ScottE