2012-11-30 79 views
6

我想使用函數來獲取ajax調用的值。但值總是返回爲未定義。返回值只有1或0。如何從ajax調用中獲取返回值?

這裏是我的代碼:

$(function(){ 
    $('#add_product').click(function(){ 
    var i = $('#product_name').val(); 
    param = 'product_name='+i; 
    var value = check_product(param); 
    alert(value); 
    return false; 
    }); 
}); 

function check_product(param){ 
    $.ajax({ 
    type : 'POST', 
    data : param, 
    url : baseurl+'cart/check_product_name/', 
    success : function(result){ 
     //alert(result); 
     return result; 
    } 
}); 
} 

嗨,大家好,在得到這個工作還是工作。我現在的價值顯示爲1或0.現在我試圖完成的是如何在if語句中實現。我想有這樣的事情。如果val = 0則返回true;否則返回false。我不知道我在使用ajax函數的正確軌道。但如果有更好的方式,你可以告訴我,我會很感激。

$(function(){ 
     $('#add_product').click(function(){ 
     var i = $('#product_name').val(); 
     param = 'product_name='+i; 
     check_product(param).done(function(value) { 
     var val = value; //waits until ajax is completed 
     }); 
     if(val == 0){ 
      return true; 
     } else{ 
      return false; 
     } 
     }); 
    }); 

function check_product(param){ 
    return $.ajax({ 
    type : 'POST', 
    data : param, 
    url : baseurl+'cart/check_product_name/' 
}); 
} 
+3

'ajax'中的'a'代表異步... :)所以您需要根據您的成功處理程序中的結果執行操作 –

+0

您是否也可以提供PHP /腳本?你也檢查過你的PHP /腳本實際上是否獲得了你傳遞的變量? –

+0

對於請求還有'async:false'。我不會使用它:p –

回答

20

它是異步的,所以你必須等待ajax調用才能獲取數據,然後才能發出警報。

$(function() { 
    $('#add_product').click(function() { 
     var i = $('#product_name').val(), 
      par = 'product_name=' + i; 

     check_product(par).done(function(value) { 
      alert(value); //waits until ajax is completed 
     }); 

     return false; 
    }); 
}); 

function check_product(param) { 
    return $.ajax({ 
     type : 'POST', 
     data : param, 
     url : baseurl + 'cart/check_product_name/' 
    }); 
}​ 
+0

從來沒有想過要返回一個被緩存的對象,+1。通常情況下,我只是通過回調。 –

+1

@JanDvorak - 謝謝,我以前總是使用回調函數,但只是返回延遲對象的結果,完成失敗並始終直接執行,並使我的觀點更容易。 – adeneo

+0

@adeneo很酷,謝謝! –

1

此加入AJAX選項:

dataType: "json", 

,並在你的操作方法使用

return Json(dataObject, JsonRequestBehavior.AllowGet); 

您可以通過返回Ajax調用和使用done(),像這樣做,很容易。

return result; 
在阿賈克斯的成功處理程序

不是check_product回報。將另一個函數(可能是匿名)傳遞給check_product並調用ajax成功。