2011-12-24 6 views
7

सबमिट करें मैं node.js और एक्सप्रेस का उपयोग करता हूं। जब मैं बटन दबाता हूं (btnSend), मैं एक्सप्रेस द्वारा node.js को डेटा भेजना चाहता हूं (पृष्ठ को रीफ्रेश किए बिना)। मैं डेटा कैसे भेजूं? Jquery का उपयोग करना?Node.js - फॉर्म

कृपया मदद करें।

सलाह के लिए धन्यवाद।

$("form").submit(function(e) { 
    e.preventDefault(); // Prevents the page from refreshing 
    var $this = $(this); // `this` refers to the current form element 
    $.post(
     $this.attr("action"), // Gets the URL to sent the post to 
     $this.serialize(), // Serializes form data in standard format 
     function(data) { /** code to handle response **/ }, 
     "json" // The format the response should be in 
    ); 
}); 

यह कोड स्निपेट पृष्ठ पर सभी प्रपत्र तत्वों पाता है और उन लोगों से एक प्रस्तुत घटना के लिए सुनता है:

<form action="/Send" method="post"> 
Username: 
<input type="text" name="user" id="txtUser" /> 
<input type="submit" value="Submit" id="btnSend" /> 
</form> 
+1

यह विषय बंद है, लेकिन एक "लेबल टैग] (https://developer.mozilla.org/en/HTML/Element/label) के साथ टेक्स्ट इनपुट तत्व को लपेटने पर विचार करें। यह फ़ॉर्म को थोड़ा अधिक अर्थपूर्ण और प्रयोग योग्य बनाता है। – Xavi

उत्तर

15

गया है कि आपकी jQuery की तरह दिखना चाहिए का एक मोटा रूपरेखा है। एक फॉर्म को कई तरीकों से सबमिट किया जा सकता है (पूर्व सबमिट बटन पर क्लिक करके, एंटर मारना आदि ...), इसलिए प्रयोज्यता के लिए, सबमिट बटन पर क्लिक इवेंट कुंजी सुनने के लिए सीधे सबमिट घटनाओं के लिए सुनना सर्वोत्तम होता है ।

जब कोई सबमिट ईवेंट होता है, तो ऊपर दिया गया कोड e.preventDefault पर कॉल करके डिफ़ॉल्ट ब्राउज़र क्रियाओं (जो अन्य चीजों के साथ पृष्ठ को रीफ्रेश करता है) को रोकता है। यह क्रिया विशेषता में उल्लिखित यूआरएल में फॉर्म डेटा भेजने के लिए $.post का उपयोग करता है। ध्यान दें कि $.fn.serialize का उपयोग प्रारूप डेटा को मानक प्रारूप में क्रमबद्ध करने के लिए किया जाता है।

आपका एक्सप्रेस कोड कुछ इस तरह दिखना चाहिए:

var express = require('express') 
    , app = express.createServer(); 

app.use(express.bodyParser()); // Automatically parses form data 

app.post('/Send', function(req, res){ // Specifies which URL to listen for 
    // req.body -- contains form data 
}); 

app.listen(3000); 

प्रलेखन express.bodyParser पर थोड़ा विरल है, लेकिन code spelunking का एक सा होने के बाद यह यह node-querystring कवर के नीचे का उपयोग करता है की तरह लग रहा है।

आशा है कि इससे मदद मिलती है!

+0

मुझे क्लाइंट-साइड प्रतिक्रिया फ़ंक्शन को आग लगने में परेशानी हो रही है। फ़ंक्शन (डेटा) {/ ** कोड को संभालने के लिए कोड ** /}, क्या आपको क्लाइंट साइड कोड में res.end() या कुछ जोड़ने की आवश्यकता है? – CMaury

+1

नहीं, आपको क्लाइंट पक्ष पर 'res.end' को कॉल नहीं करना चाहिए - केवल सर्वर पक्ष पर। क्रोम के देव कंसोल में, मैं नेटवर्क टैब में होगा और सुनिश्चित करता हूं कि पोस्ट अनुरोध बिना त्रुटि के पूरा हो रहा है। इसके अलावा अपने सर्वर साइड प्रतिक्रिया कोड पर एक नज़र डालें (यानी '// req.body में कोड - फॉर्म डेटा' फ़ंक्शन शामिल है) और सुनिश्चित करें कि आप अपनी प्रतिक्रिया सही तरीके से समाप्त कर रहे हैं। उम्मीद है की वो मदद करदे। – Xavi

+0

मैं इस मुद्दे को कम करने में सक्षम था, और यह इस प्रश्न से संबंधित नहीं है। किसी कारण से ऐप हमेशा के लिए उपयोग करते समय fs.appendfile नहीं ढूंढ पा रहा है लेकिन यह nodemon का उपयोग करते समय ठीक काम करता है। – CMaury