2010-11-17 10 views
6
function lookupRemote(searchTerm) 
{ 
    var defaultReturnValue = 1010; 
    var returnValue = defaultReturnValue; 

    $.getJSON(remote, function(data) 
    { 
     if (data != null) 
     { 
      $.each(data.items, function(i, item) 
      { 
       returnValue = item.libraryOfCongressNumber; 
      }); 
     } 
    }); 
    return returnValue; 
} 

इस फ़ंक्शन से returnValue फ़ंक्शन की शुरुआत में डिफ़ॉल्ट मान सेट के बराबर क्यों है और कभी भी JSON लुकअप से पुनर्प्राप्त मूल्य के बराबर नहीं है?

+0

देखें http://stackoverflow.com/questions/3537434/cant-get-correct-return-value-from-an-jquery-ajax-call –

+0

संभावित डुप्लिकेट [AJAX कॉल से प्रतिक्रिया कैसे वापस करें? ] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) – Bergi

उत्तर

11

ऐसा इसलिए होता है क्योंकि कॉलबैक फ़ंक्शन (function(data) {...}) बाद में चलाता है जब प्रतिक्रिया वापस आती है ... क्योंकि यह एक असीमित कार्य है। इसके बजाय मूल्य का उपयोग एक बार आप इसे निर्धारित किया है, इस तरह:

function lookupRemote(searchTerm) 
{ 
    var defaultReturnValue = 1010; 
    var returnValue = defaultReturnValue; 
    $.getJSON(remote, function(data) {   
     if (data != null) { 
       $.each(data.items, function(i, item) {     
        returnValue = item.libraryOfCongressNumber; 
       }); 
     } 
     OtherFunctionThatUsesTheValue(returnValue); 
    }); 
} 

इस तरह सभी अतुल्यकालिक व्यवहार किया जाना चाहिए, जो कुछ भी शुरू मूल्य की जरूरत है एक बार आप इसे है ... जो है जब सर्वर के साथ प्रतिक्रिया डेटा।

3

समारोह आप getJSON को पारित चलाने जब HTTP अनुरोध के जवाब आता है जो है नहीं तुरंत है।

रिटर्न स्टेटमेंट प्रतिक्रिया से पहले निष्पादित करता है, इसलिए चर सेट नहीं किया गया है।

क्या आपके कॉलबैक फ़ंक्शन को डेटा के साथ क्या करने की आवश्यकता है। इसे वापस करने की कोशिश मत करो।

8

आप अतुल्यकालिक समारोह का उपयोग नहीं करना चाहते हैं, तो बेहतर निम्नलिखित का उपयोग करें:

function getValue(){ 
    var value= $.ajax({ 
     url: 'http://www.abc.com', 
     async: false 
    }).responseText; 
    return value; 
} 

इस समारोह इंतजार कर रहा है जब तक मूल्य सर्वर से दिया जाता है।

+0

** प्रतिक्रिया जेएसओएन ** का उपयोग करने की सलाह दें .. धन्यवाद, ठीक काम करें! – KingRider

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