2012-01-27 18 views
7

उदाहरण के लिए मैं एक समारोह है:लौट AJAX कॉलबैक लौट

var f1 = function(arg) { 
    var a; 
    $.ajax({ 
     ... 
     success: function(data) { 
      a = f2(data); 
      //return a; 
     } 
    }); 
    //return a; 
} 

var f3 = function() { 
    a = f1(arg); 
} 

मैं कैसे f1 में AJAX के बाद a लौट सकते हैं data मिल सकता है?

+0

आप कहां भेजना चाहते हैं। यह महत्वपूर्ण सवाल है – Baz1nga

+0

यह ** ए ** जेएक्स है ...आपको कॉलबैक फ़ंक्शंस का उपयोग करके अपना कोड काम करने की आवश्यकता है। –

उत्तर

15

आप अपने AJAX अनुरोध का परिणाम वापस नहीं कर सकते क्योंकि अनुरोध असीमित है (और सिंक्रोनस AJAX अनुरोध भयानक विचार हैं)।

आपका सबसे अच्छा शर्त f1

var f1 = function(arg, callback) { 
    $.ajax({ 
     success: function(data) { 
      callback(data); 
     } 
    }); 
} 

में अपने स्वयं के कॉलबैक पारित करने के लिए तो फिर तुम f1 इस तरह फोन था हो जाएगा:

f1(arg, function(data) { 
      var a = f2(data); 
      alert(a); 
     } 
); 
+0

अद्भुत उत्तर – merveotesi

+0

एफ 2 का प्रतिनिधित्व क्या करता है? शायद कॉलबैक? – Rodent

+0

यह ठीक है, यह बताता है: http://stackoverflow.com/questions/14754619/jquery-ajax-success-callback-function-definition – Rodent

2

लघु, आसान जवाब: आप नहीं कर सकते।

आप a वैश्विक बना सकते हैं, लेकिन आप समय के मुद्दों के अधीन हैं।

बेहतर करने के लिए या तो:

एक कॉलबैक में
  1. पास अजाक्स सफलता में चलाने के लिए, या
  2. उपयोग jQuery के .when/.then construct, या
  3. बस कॉलबैक में काम करते हैं।
  4. (हाँ, आप कॉल तुल्यकालिक बना सकता है। न दें।)
0

यह करने के लिए सबसे आसान तरीका है ajax कॉल तुल्यकालिक बनाना है। आपके f1 फ़ंक्शन में अर्थ एजेक्स कॉल को एसिंक के साथ सेट करें: झूठी ताकि जब तक कॉल पूरा नहीं हो जाता है और डेटा वापस नहीं आता है तब तक फ़ंक्शन नहीं चलता है।

0

आपको अजाक्स कॉल सिंक्रोनस बनाने की आवश्यकता है। आप क्या कर सकते हैं कि इस तरह:

$.ajax({ 
    ... 
    async: false, 
    success: ... 
}); 
return a; 

इस तरह जे एस निष्पादन कॉल रिटर्न जब तक थम जाएगा और success समारोह चलाता है।

बेशक सिंक कॉल का मुद्दा है। यदि आप अपने कोड को दोबारा दोहराते हैं तो यह सबसे अच्छा है ताकि आप a वैरिएबल success कॉलबैक में कर सकें।

इस विचार पर बिल्डिंग, मान लें कि आपकी f3 समारोह कुछ इस तरह था:

var f3 = function() { 
    a = f1(arg); 
    alert(a); //i.e. "do something" with "a" 
} 
आप इस के बजाय कर सकता है:

var f3 = function() { 
    f1(arg); 
} 
var f3_callback = function(a) { 
    alert(a); //i.e. "do something" with "a" 
} 

तो, अपनी सफलता समारोह इस प्रकार दिखाई देगा:

success: function(data) { 
    a = f2(data); 
    f3_callback(a); 
} 

मुझे उम्मीद है कि यह स्पष्ट है!

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