2011-11-26 79 views
0

如果數據爲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. –

回答

4

在未來任意時間.ajax()調用返回。 keyupchange處理程序立即返回(基本上)。

在您的success處理程序中執行此項工作。或者,您可以將全局(或名稱空間全局)設置爲返回值,但要理解,在Ajax調用完成之前它將無效。

如果if聲明本身不符合您的期望,您還需要確保所返回的數據是您期望的數據。這與事件處理程序的返回值不同。

+0

是的,它工作正常,我從數據輸出0。 –

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

     } 
    }); 

} 
+0

是不是這樣寫成功函數內的數據處理程序?這隻會調用成功執行另一個調用的函數。 「這不是阻塞」是什麼意思?我無法正確理解它。 –

+0

先前接受的答案(已刪除)建議使用async:false,它會阻止其他請求。我的回答是迴應那個建議。當然,如果有意義的話,你可以在這個函數中寫入處理程序。這是更加模塊化的。 – ScottE