2012-12-21 14 views
5

मुझे यह एक लंबा सवाल पता है, इसलिए मुझे जितना संभव हो उतना समझाएं।मैं एक जावास्क्रिप्ट फ़ंक्शन को निष्पादित करने के लिए कैसे एक अधिभार फ़ंक्शन पूरा करने के बाद एक मान की आवश्यकता है जो मान देता है?

मेरे पास दो जावास्क्रिप्ट फ़ंक्शन हैं जिन्हें मैं पृष्ठ लोड के बाद चलाने के लिए चाहता हूं, हम उन्हें function1() और function2() कहते हैं।

function1() डेटाबेस से जानकारी प्राप्त करने के लिए AJAX का उपयोग करता है जो डेटाबेस में प्राप्त जानकारी से div में सामग्री व्यवस्थित करेगा। फ़ंक्शन समाप्त होने के बाद यह डेटाबेस से सामग्री भी लौटाता है।

function2() को ठीक से चलाने के लिए डेटाबेस से मूल्य की आवश्यकता होती है, इसलिए इसे फ़ंक्शन 1() रन 2() रन से पहले अपना मान देता है।

function function1() { 
if (some_cookie_exists) { 
    //run some code 
} else { 
    //send parameters through "POST" 
    xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
    var a = some_value_from_database; 
    // change div content 
    return a; 
    } 
    } 
//sending parameters 
} 
function function2(a) { 
//run code that depends on value of "a" 
} 

window.onload = function() { 
var data = function1(); 
function2(data); 

त्रुटि मैं कि वर डेटा अपरिभाषित है: दुर्भाग्य से मेरे कोड काम नहीं कर रहा है, और बहुत अधिक विस्तार में जाने के बिना, नीचे दिए गए कोड की एक योजनाबद्ध है। function1() डेटा को सफलतापूर्वक पुनर्प्राप्त करता है, और जैसा कि मैंने इसका इरादा किया है, चलता है, लेकिन function2() निष्पादित नहीं करता है, क्योंकि मान गुम है। क्या कोई यह समझ सकता है कि मुझे यह क्यों मिल रहा है और मुझे इसे हल करने के बारे में कैसे जाना चाहिए?

नोट: मैं वास्तव में जावास्क्रिप्ट (अभी भी उस पर नौसिखिया) से परिचित हूं, मुझे अनिवार्य रूप से JQuery के बारे में कुछ नहीं पता है, इसलिए यदि आप कोड को ठीक करने के लिए इसका उपयोग करते हैं, तो कृपया मुझे बताएं कि यह क्यों काम करता है (यह मुझे बचाएगा बाद में परेशानी)

उत्तर

4

AJAX असीमित है (यही पहला ए खड़ा है)। AJAX ऑपरेशन के परिणाम function1() में उपलब्ध नहीं हैं, उन्हें onreadystatechange हैंडलर में पुनर्प्राप्त किया गया है जिसे आप XMLHttpRequest ऑब्जेक्ट से अटैच करते हैं। तो यह स्पष्ट नहीं है कि आप

var a = some_value_from_database; 

function1() में कैसे कर सकते हैं।

आपको function2()onreadystatechange हैंडलर से कॉल करने की आवश्यकता है।

यदि आप function1 के वास्तविक कार्यान्वयन को पोस्ट करते हैं तो हम अधिक विशिष्ट विवरण प्रदान करने में सक्षम हो सकते हैं।

अद्यतन:

यहाँ कैसे function2() कॉल करने के लिए जब मूल्य AJAX कॉल से उपलब्ध हो जाता है है:

xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     var a = some_value_from_database; 
     function2(a); 
    } 
} 
+0

सुनिश्चित नहीं हैं कि वास्तव में अपने आप को, लेकिन जब मैं मान प्राप्त, मैं डेटाबेस से मूल्य प्राप्त करें।जैसे मैंने कहा, मैं जावास्क्रिप्ट –

+0

पर अपेक्षाकृत नया हूं मैंने फ़ंक्शन को –

+0

से ऊपर रखा है फ़ंक्शन कहां है? – Barmar

4

एक कॉलबैक के साथ यह मत करो।

function function1(callback) { 
    /* ... */ 
    callback(data); // instead of return 
} 
var function2 = function(data) { // important: make "function2" a variable so that it can be passed as an argument later on 
    /* ... */ 
}  
window.onload = function() { 
    function1(function2); // important: no parentheses after function2, otherwise it would be executed right away 
} 
+0

कॉलबैक वास्तव में क्या करता है? मुझे इसके बारे में कहीं और पढ़ना याद है, लेकिन इसे समझ में नहीं आया –

+0

कॉलबैक की अवधारणा का अर्थ है कि आप रिटर्न वैल्यू पास नहीं करते हैं बल्कि कार्य को अगले निष्पादित किया जाता है। – akirk

0

क्योंकि परिभाषा द्वारा AJAX असीमित है, फ़ंक्शन 2 फ़ंक्शन 1 में AJAX पूर्ण होने से पहले निष्पादन शुरू कर देगा। JQuery यहां उपयोगी होगा, क्योंकि आप function1 में AJAX कॉल की सफलता कॉलबैक में function2 रख सकते हैं।

तो अपने HTML में JQuery शामिल करके निम्न जे एस काम करना चाहिए:

$(function() { //same as onload 
     function1() ; 
} 

function function1() { 
     $.ajax({ 
       url: "url here", 
       type: "GET", 
       success: function(data) { // data is what is returned in ajax response 
          // rearrange divs 
          function2(data); 
       } 
      }); 
); 

function function2(data) { 
} 

अधिक JQuery ajax समारोह यहां पर: http://api.jquery.com/jQuery.ajax/

+0

जानकारी के लिए धन्यवाद, मैं इसे आज़माउंगा –

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

  • कोई संबंधित समस्या नहीं^_^