2010-05-16 16 views
5

मैं अपने स्वयं के फ़ंक्शन में एक jQuery AJAX कॉल से रिटर्न का उपयोग करने का प्रयास कर रहा हूं, लेकिन यह अपरिभाषित लौटता रहता है।jquery AJAX कॉल से वापस

function checkUser2(asdf) { 
    $.ajax({ 
     type: "POST", 
     async: false, 
     url: "check_user.php", 
     data: { name: asdf }, 
     success: function(data){ 
      return data; 
      //alert(data); 
     } 
    }); 
} 

$("#check").click(function(){ 
    alert(checkUser2("muma")); 
}); 

ajax कॉल निश्चित रूप से, काम करता है क्योंकि जब मैं अपने चेतावनी uncomment मैं सही रिटर्न प्राप्त है, और मैं फ़ायरबग में देख सकते हैं। क्या मैं कुछ बेवकूफ कर रहा हूँ?

उत्तर

7

AJAX कॉल एसिंक्रोनस है - इसका मतलब है कि AJAX अनुरोध सामान्य प्रोग्राम निष्पादन के बाहर किया गया है, और आपके प्रोग्राम में इसका अर्थ है कि checkUser2() अलर्ट पर डेटा वापस नहीं कर रहा है।

आप इस तरह से $.ajax() कॉल से वापसी मूल्यों का उपयोग नहीं कर सकते हैं, बजाय AJAX रिटर्न डेटा का उपयोग success() फ़ंक्शन पर करने के लिए कोड को ले जाएं - जो कि इसके लिए है।

1

ऐसा करें:

function checkUser2(asdf) { 
    var result; 
    $.ajax({ 
     type: "POST", 
     async: false, 
     url: "check_user.php", 
     data: { name: asdf }, 
     success: function(data){ 
      result = data;    
     } 
    }); 
    return result; 
}  


$("#check").click(function(){ 
    alert(checkUser2("muma")); 
}); 

आप परिणाम चर बाहर एक वैश्विक जावास्क्रिप्ट चर के रूप में के बजाय स्थानांतरित करने के लिए हो सकता है। मैंने अभी तक इसका परीक्षण नहीं किया है।

+1

सिंक्रोनस AJAX हालांकि वास्तव में एक बुरा विचार है। – Pointy

+0

मैं सहमत हूं, लेकिन ओपी की समस्या के आसपास यह एक तरीका था। और वह पहले से ही एक अतुल्यकालिक तरीके से AJAX फ़ंक्शन का उपयोग कर रहा था। – Falle1234

+0

इस तरह से मेरे लिए भी काम नहीं किया। $ ("# submitPO") क्लिक करें (फ़ंक्शन() { अलर्ट (अपडेटपीओ ("444")); }); एक चेतावनी पॉप करने में विफल रहा। मेरा कार्य आपके जैसा ही संरचित है। –

3

आप ऐसा कर सकता है, मुझे लगता है:

function checkUser2(asdf) { 
    var s = $.ajax({ 
     type: "POST", 
     async: false, 
     url: "check_user.php", 
     data: { name: asdf }, 
     success: function(data){ 
      return data; 
      //alert(data); 
     } 
    }).responseText; 
    return s; 
}  

लेकिन, jquery doc page for ajax function के 4 उदाहरण के रूप में कहते हैं, मुझे लगता है कि

ब्लाकों ब्राउज़र जबकि अनुरोध सक्रिय है। उपयोगकर्ता इंटरैक्शन को अवरुद्ध करना बेहतर है> सिंक्रनाइज़ेशन आवश्यक होने पर अन्य माध्यमों से।

+0

यह उस समस्या को ठीक करता है जो मेरे पास लगभग उसी परिदृश्य में था, क्योंकि "async: false" कॉल को असुरक्षित तरीके से रोकने के लिए महत्वपूर्ण हिस्सा था। –

0

आप jQuery की डेटा विधि का उपयोग करके "डेटा" स्टोर भी कर सकते हैं और इसे वैश्विक jQuery ऑब्जेक्ट या स्थानीय jQuery चयनकर्ता से संबद्ध कर सकते हैं। उदा

success: function(data) { 
    $.data('result', data); 
} 

वापसी मान कहीं भी

$.data('result') 

का उपयोग कर पहुँचा जा सकता है तुम भी एक स्थानीय चर को यह से संबद्ध कर सकते हैं (जैसे $ ('# MyID') के लिए। डेटा()) ताकि उसके वैश्विक दायरे के बजाय उस वस्तु के लिए स्थानीय।

+0

मैंने आपके सुझाव का उपयोग करने की कोशिश की। मैं इसे काम नहीं कर सका। $ ("# submitPO") क्लिक करें (फ़ंक्शन() { अलर्ट ($। डेटा ('परिणाम')); }); कुछ नहीं किया। –

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