2009-01-14 11 views
8

अपडेट करें मैं सोच रहा हूं कि मैं अजाक्स (प्रोटोटाइप फ्रेमवर्क का उपयोग करके) के माध्यम से एक फॉर्म कैसे सबमिट कर सकता हूं और "परिणाम" div में सर्वर प्रतिक्रिया प्रदर्शित कर सकता हूं।प्रोटोटाइप का उपयोग करके अजाक्स के माध्यम से एक फॉर्म सबमिट करें और परिणाम div

<form id="myForm" action="/getResults"> 
    [...] 
    <input type="submit" value="submit" /> 
</form> 
<div id="result"></div> 

मैं एक जावास्क्रिप्ट समारोह (जो Ajax.Updater उपयोग करता है) करने के लिए "ऑनसबमिट" (फार्म पर) और "onclick" (इनपुट पर), लेकिन रूप है संलग्न करने के लिए करने की कोशिश की: एचटीएमएल इस तरह दिखता है फ़ंक्शन समाप्त होने के बाद भी "गैर-अजाक्स" सबमिट किया गया है (इसलिए पूरा पृष्ठ परिणामों द्वारा प्रतिस्थापित किया गया है)।

उत्तर

33

प्रोटोटाइप एपीआई के पृष्ठों को Form.Request और Event हैंडलिंग पर देखें।

मूल रूप से, अगर आपके पास इस:

<form id='myForm'> 
.... fields .... 
<input type='submit' value='Go'> 
</form> 
<div id='result'></div> 

आपका js होगा, और अधिक या कम:

Event.observe('myForm', 'submit', function(event) { 
    $('myForm').request({ 
     onFailure: function() { .... }, 
     onSuccess: function(t) { 
      $('result').update(t.responseText); 
     } 
    }); 
    Event.stop(event); // stop the form from submitting 
}); 
+1

मुझे लगता है कि यह उत्तर चयनित उत्तर से बेहतर है क्योंकि इस तरह आप जावास्क्रिप्ट पक्ष में सबकुछ करते हैं। – AntonioCS

+1

फॉर्म पर mysunmit = "myfunc()" को कोई जोड़ नहीं है, और अधिक अलगाव महत्वपूर्ण नहीं हो सकता है! –

+1

एनबी - प्रोटोटाइप अजाक्स के माध्यम से फ़ाइल अपलोड जमा करने के साथ संगत नहीं है। Http://www.ruby-forum.com/topic/136931 देखें। – gatoatigrado

3

आपको AJAX फ़ंक्शन से मूल्य को वापस करने की आवश्यकता है, जो मानक फ़ॉर्म सबमिट करता है।

<form id="myForm" onsubmit="return myfunc()" action="/getResults"> 


function myfunc(){ 
    ... do prototype ajax stuff... 
    return false; 

}

प्रपत्र भी पर ऑनसबमिट का उपयोग करते हुए, जो प्रवेश कुंजी के साथ प्रस्तुत उपयोगकर्ताओं कैप्चर करता है।

+0

मैं "return false" था समारोह में, लेकिन मैं ऑनसबमिट में समारोह ऊपर वापसी याद आ रही थी ... – Vinze

+0

किया है कि एक खुद को कुछ सौ बार;) – krosenvold

3

आपको पहले serialize your form की आवश्यकता है, तो का उपयोग करके Ajax Updater पर कॉल करें और इसे क्रमबद्ध फ़ॉर्म डेटा पास करें। परिणाम तब आपके द्वारा निर्दिष्ट तत्व में दिखाई देगा।

+0

जिस तरह से @ पाओलो ने कहा कि यह पहले से ही हमारे फॉर्म को क्रमबद्ध करता है और भेजता है। –

0

आप onsubmit घटना के डिफ़ॉल्ट कार्रवाई को रोकने के लिए की जरूरत है।

उदाहरण के लिए:

function submit_handler(e){ 
    Event.stop(e) 
} 

अधिक जानकारी पर stopping default event behavior in Prototype »

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