2009-08-04 16 views
39

मैं प्रोटोटाइप का उपयोग अपने AJAX के विकास करना है, और मैं इस तरह कोड का उपयोग करें:AJAX प्रतिक्रिया पाठ कैसे वापस करें?

somefunction: function(){ 
    var result = ""; 
    myAjax = new Ajax.Request(postUrl, { 
     method: 'post', 
     postBody: postData, 
     contentType: 'application/x-www-form-urlencoded', 
     onComplete: function(transport){ 
      if (200 == transport.status) { 
       result = transport.responseText; 
      } 
     } 
    }); 
    return result; 
} 

और मुझे लगता है कि "परिणाम" कोई रिक्त स्ट्रिंग है। इसलिए, मैंने यह कोशिश की:

somefunction: function(){ 
    var result = ""; 
    myAjax = new Ajax.Request(postUrl, { 
     method: 'post', 
     postBody: postData, 
     contentType: 'application/x-www-form-urlencoded', 
     onComplete: function(transport){ 
      if (200 == transport.status) { 
       result = transport.responseText; 
       return result; 
      } 
     } 
    }); 

} 

लेकिन यह भी काम नहीं करता था। मैं उपयोग करने के लिए अन्य विधि के लिए प्रतिक्रिया पाठ कैसे प्राप्त कर सकते हैं?

उत्तर

27

याद रखें कि ऑनफंक्शन को काम करने के बाद लंबे समय तक कॉल किया जाता है। आपको क्या करना है पैरामीटर के रूप में कुछ कार्य करने के लिए कॉलबैक फ़ंक्शन पास करना है। इस समारोह जब प्रक्रिया काम कर (यानी, onComplete) किया जाता है बुलाया जाएगा:

somefunction: function(callback){ 
    var result = ""; 
    myAjax = new Ajax.Request(postUrl, { 
     method: 'post', 
     postBody: postData, 
     contentType: 'application/x-www-form-urlencoded', 
     onComplete: function(transport){ 
      if (200 == transport.status) { 
       result = transport.responseText; 
       callback(result); 
      } 
     } 
    }); 

} 
somefunction(function(result){ 
    alert(result); 
}); 
+0

आपका उत्तर महान, अधिक कार्यात्मक/ओओपी शैली है, और वास्तव में, वास्तव में बहुत अच्छा है। हालांकि, [किसी का] - जवाब बिंदु पर था: असीमित: झूठा अधिक आसान है और प्रश्न लेखक चाहता था आसान है (लेकिन आपका समाधान अधिक एक्स्टेंसिबल और लचीला है)। –

+1

असीमित: झूठी प्रतिक्रिया प्राप्त होने तक ब्राउज़र को रोक देगा। यदि नेटवर्क कनेक्शन धीमा है, तो सर्वर से कनेक्ट करने में कुछ सेकंड लगते हैं, तो पूरा ब्राउज़र कुछ सेकंड के लिए जमा हो सकता है, और उपयोगकर्ता इनपुट का जवाब नहीं देगा। यह अच्छी उपयोगिता नहीं है। यह आसान हो सकता है, लेकिन यह अच्छी तरह से व्यवहार नहीं करता है, और इसलिए ** 'असीमित: झूठी' का उपयोग कभी नहीं किया जाना चाहिए **। – Marius

+0

क्षमा करें, मैंने वास्तव में पहले एसिंक्रोनस का उपयोग नहीं किया था। आप सही हैं, इसलिए यह मूल रूप से 'फ़ंक्शन AJAXLoader() {var fAjaxLoaded = false; $। AJAX (..., सफलता: फ़ंक्शन() {fAjaxLoaded = true;}) जैसा ही है; जबकि (fAjaxLoaded); वापसी ...} ' –

3

कैसे "अतुल्यकालिक: गलत" जोड़ने के बारे में अपने कोड में? मेरे मामले में, यह अच्छी तरह से काम किया :)

+0

जो अजाक्स के उद्देश्य को हरा देता है? –

+5

यह खराब है क्योंकि, सिंक्रोनस अनुरोधों के साथ, आप अनुरोध करते समय ब्राउज़र में सभी जेएस निष्पादन को अवरुद्ध कर रहे हैं। – finishingmove

+1

उद्देश्य को हरा देता है लेकिन आपके दिन को बचाता है। –

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