2012-11-30 22 views
6

मैं फ़ंक्शन का उपयोग करके अजाक्स कॉल पर मान लेना चाहता था। लेकिन मूल्य हमेशा अपरिभाषित के रूप में वापस आते हैं। वापसी मान केवल 1 या 0.एजेक्स कॉल से वापसी मूल्य कैसे प्राप्त करें?

यहाँ है मेरे कोड है:

$(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 दिखा रहा है। अब मैं क्या करने की कोशिश कर रहा हूं यह है कि मैं इसे कथन में कैसे कर सकता हूं। मैं ऐसा कुछ करना चाहता था। यदि वैल = 0 सही हो जाता है; और झूठी वापसी। मुझे यकीन नहीं है कि मैं 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

'अजाक्स' में 'ए' अतुल्यकालिक के लिए खड़ा है ... :) इसलिए आपको अपने सफल हैंडलर –

+0

में परिणाम पर निर्भर करने वाले कार्यों को करने की आवश्यकता है क्या आप PHP/स्क्रिप्ट भी प्रदान कर सकते हैं? क्या आपने यह भी जांच लिया है कि आप वास्तव में PHP/स्क्रिप्ट को वेरिएबल्स प्राप्त कर रहे हैं जिन्हें आप पास कर रहे हैं? –

+0

अनुरोध के लिए 'async: false' भी है। मैं इसका उपयोग नहीं करता हालांकि: पी –

उत्तर

20

यह अतुल्यकालिक है, ताकि आप ajax कॉल के लिए प्रतीक्षा करने के लिए डेटा वापस पाने के लिए इससे पहले कि आप सचेत कर सकते हैं।

dataType: "json", 

और अपनी कार्रवाई विधि में

return Json(dataObject, JsonRequestBehavior.AllowGet); 

का उपयोग करें:

$(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

@ एडेनेओ जो बहुत अच्छा है, धन्यवाद! विशिष्ट समाधान के लिए –

1

ajax विकल्पों को यह जोड़ें: आप ajax कॉल लौटने और done() का उपयोग कर, तो तरह से आसानी से ऐसा कर सकते हैं ।

आपका

return result; 
ajax की सफलता हैंडलर में

check_product के लिए एक वापसी नहीं है। check_product पर एक और फ़ंक्शन (संभवतः अनाम) पास करें और AJAX सफलता पर कॉल करें।

संबंधित मुद्दे