2010-09-02 11 views
7

मैं है निम्नलिखित कोड:जावास्क्रिप्ट समारोह प्रतिक्रिया के लिए प्रतीक्षा

myFunc(); 
bar(); 

myFunc() एक ajax अनुरोध

मैं myFunc जब तक बार() निष्पादित करने के लिए नहीं करना चाहते हैं() का अनुरोध कर रही है पूरा हो गया।

मैं भी अपने फनक के अंदर कॉल को बार() में स्थानांतरित नहीं करना चाहता हूं।

संभव है?

var FOO = { 
init: function(blah) 
{ 
    // Callbacks to pass to the AJAX challenge data load 
    var callbacks = { 
    myFunc1: function(){ myFunc1(blah); }, 
    myFunc2: function(){ myFunc2(blah); }, 
    }; 

    this.bar(callbacks); // Load the challenge data and setup the game 
}, 
bar: function(callbacks) { ..loop through and execute them.. } 

}; 
+1

जनवरी और जेरोम दोनों की एक पैरामीटर वैध उत्तर, व्यक्तिगत रूप से मैं जेरोमस की ओर झुका रहा हूं क्योंकि जावास्क्रिप्ट में सामान करने का सामान्य तरीका –

+0

आप पहिया को फिर से क्यों बदल रहे हैं? कॉलबैक का समर्थन करने वाले प्रीमियर अजाक्स लाइब्रेरी का उपयोग करने के बजाय सभी क्रॉस-ब्राउज़र क्विर्क से निपटने का कोई उचित कारण नहीं है। – slikts

+0

मैं पहिया को फिर से शुरू करने की कोशिश नहीं कर रहा था। मुझे नहीं पता था कि मैं क्या कर रहा था, अवधि। जेरोम का सुझाव बहुत अच्छा काम करता है। मेरे द्वारा समाप्त किए गए कार्यों के लिए * संपादित करें * देखें: मुझे लगता है कि यह आदर्श है ... –

उत्तर

6

आदेश के लिए आप क्या देख रहे हैं करने के लिए, आप बार()myFunc() के साथ संवाद करने के लिए एक रास्ता खोजने चाहिए।

जब आप कहते हैं कि तुम myFunc (अंदर बार() करने के लिए कॉल स्थानांतरित करने के लिए नहीं करना चाहते हैं) इस में कई तरह से व्याख्या की जा सकती।

उदाहरण के लिए, आप कर सकते हैं बार()myFunc()

function bar() { 
    // do what bar() does 
} 

function myFunc(callback) { 
    // use callback in the onreadystatechange property of the xmlhtprequest object 
} 

myFunc(bar) 

मुझे आशा है कि यह तुम्हारी मदद करेगा

जेरोम वैगनर

0

नहीं है, संभव नहीं है जब तक आप एक तुल्यकालिक अनुरोध अब AJAX है और जो कुछ का उपयोग मैं आप की सिफारिश नहीं होगा:

संपादित

यहाँ कोड मैं के साथ समाप्त हो गया है ऐसा करने के बाद यह अनुरोध पूरा होने तक यूआई को फ्रीज कर देगा और उपयोगकर्ता अपने ब्राउज़र को ठंडा करने से नफरत करते हैं।

0

नहीं, यह संभव नहीं है।

आप इसे साइड इफेक्ट के साथ प्राप्त कर सकते हैं कि आप AJAX अनुरोध के बजाय SJAX अनुरोध करके ब्राउज़र को लॉक करते हैं, लेकिन यह एक भयानक विचार है।

ईवेंट संचालित प्रोग्रामिंग वातावरण में काम करते समय ईवेंट संचालित प्रोग्रामिंग से प्यार करना सीखें।

1

यदि आप एक प्रकार का झंडा जोड़ सकते हैं जो इंगित करेगा कि myFunc() ने इसके अनुरोध के साथ समाप्त कर दिया है तो आप इसे कर सकते हैं, लेकिन यह एक अच्छा विचार नहीं है - कॉलबैक का उपयोग करना सबसे अच्छा अभ्यास है।

इस कोड का प्रयास करें:

var successRequest = false; 
myFunc(); // when get the response set successRequest to true 

var interval = setInterval(function() { 
    if (successRequest) { 
     clearInterval(interval); 
     bar(); 
    } 
}, 100); 
+0

क्या सेट इंटरवल वैश्विक के रूप में काम करता है? मेरा मतलब है कि अगर मैं कुछ फ़ंक्शन पर अंतराल सेट करता हूं और यदि मैं इसे एक और रीसेट करता हूं (या एक ही फ़ंक्शन पर एक नए रिव्यूस्ट के साथ) क्या यह अन्य सेट इंटरवर्स को समझता है या नहीं? – kamaci

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