# बँकिंग अॅप तयार करा भाग 3: डेटा मिळवण्याचे आणि वापरण्याचे पद्धती स्टार ट्रेकमधील एंटरप्राइझचा संगणक आठवा - जेव्हा कॅप्टन पिकार्ड जहाजाची स्थिती विचारतो, तेव्हा माहिती त्वरित दिसते, संपूर्ण इंटरफेस बंद न होता आणि पुन्हा तयार न होता. माहितीचा हा अखंड प्रवाहच आपण येथे डायनॅमिक डेटा फेचिंगसह तयार करत आहोत. सध्या, तुमचे बँकिंग अॅप छापील वृत्तपत्रासारखे आहे - माहितीपूर्ण पण स्थिर. आपण ते नासाच्या मिशन कंट्रोलसारखे काहीतरी रूपांतरित करणार आहोत, जिथे डेटा सतत वाहतो आणि वापरकर्त्याच्या कामकाजात व्यत्यय न आणता रिअल-टाइममध्ये अपडेट होतो. तुम्ही सर्व्हरशी असिंक्रोनसपणे संवाद साधणे, वेगवेगळ्या वेळेस येणारा डेटा हाताळणे आणि कच्च्या माहितीचे वापरकर्त्यांसाठी अर्थपूर्ण काहीतरी रूपांतर कसे करावे हे शिकाल. हे डेमो आणि प्रॉडक्शन-रेडी सॉफ्टवेअरमधील फरक आहे. ## ⚡ पुढील 5 मिनिटांत तुम्ही काय करू शकता **व्यस्त डेव्हलपर्ससाठी जलद प्रारंभ मार्ग** ```mermaid flowchart LR A[⚡ 5 minutes] --> B[Set up API server] B --> C[Test fetch with curl] C --> D[Create login function] D --> E[See data in action] ``` - **मिनिट 1-2**: तुमचा API सर्व्हर सुरू करा (`cd api && npm start`) आणि कनेक्शन तपासा - **मिनिट 3**: `getAccount()` फंक्शन तयार करा ज्यामध्ये fetch वापरले आहे - **मिनिट 4**: लॉगिन फॉर्म `action="javascript:login()"` सह वायर करा - **मिनिट 5**: लॉगिन तपासा आणि अकाउंट डेटा कन्सोलमध्ये दिसत असल्याचे पहा **जलद चाचणी आदेश**: ```bash # Verify API is running curl http://localhost:5000/api # Test account data fetch curl http://localhost:5000/api/accounts/test ``` **महत्त्व का आहे**: 5 मिनिटांत, तुम्ही असिंक्रोनस डेटा फेचिंगचे जादू पाहाल जे प्रत्येक आधुनिक वेब अॅप्लिकेशनला चालवते. हे अॅप्स प्रतिसादात्मक आणि जिवंत वाटण्याचे फाउंडेशन आहे. ## 🗺️ डेटा-ड्रिव्हन वेब अॅप्लिकेशन्समधील तुमचा शिक्षण प्रवास ```mermaid journey title From Static Pages to Dynamic Applications section Understanding the Evolution Traditional page reloads: 3: You Discover AJAX/SPA benefits: 5: You Master Fetch API patterns: 7: You section Building Authentication Create login functions: 4: You Handle async operations: 6: You Manage user sessions: 8: You section Dynamic UI Updates Learn DOM manipulation: 5: You Build transaction displays: 7: You Create responsive dashboards: 9: You section Professional Patterns Template-based rendering: 6: You Error handling strategies: 7: You Performance optimization: 8: You ``` **तुमचा प्रवासाचा गंतव्य**: या धड्याच्या शेवटी, तुम्हाला समजेल की आधुनिक वेब अॅप्लिकेशन्स डेटा कसे फेच करतात, प्रक्रिया करतात आणि डायनॅमिकली प्रदर्शित करतात, व्यावसायिक अॅप्लिकेशन्सकडून अपेक्षित अखंड वापरकर्ता अनुभव तयार करतात. ## प्री-लेक्चर क्विझ [प्री-लेक्चर क्विझ](https://ff-quizzes.netlify.app/web/quiz/45) ### पूर्वतयारी डेटा फेचिंगमध्ये जाण्यापूर्वी, खालील घटक तयार असल्याची खात्री करा: - **मागील धडा**: [लॉगिन आणि रजिस्ट्रेशन फॉर्म](../2-forms/README.md) पूर्ण करा - आपण या फाउंडेशनवर तयार करू - **लोकल सर्व्हर**: [Node.js](https://nodejs.org) इंस्टॉल करा आणि [सर्व्हर API चालवा](../api/README.md) अकाउंट डेटा प्रदान करण्यासाठी - **API कनेक्शन**: तुमच्या सर्व्हर कनेक्शनची चाचणी या आदेशाने करा: ```bash curl http://localhost:5000/api # Expected response: "Bank API v1.0.0" ``` ही जलद चाचणी सर्व घटक योग्य प्रकारे संवाद साधत असल्याची खात्री करते: - तुमच्या सिस्टमवर Node.js योग्य प्रकारे चालत असल्याचे सत्यापित करते - तुमचा API सर्व्हर सक्रिय आणि प्रतिसाद देत असल्याचे पुष्टी करते - तुमचे अॅप सर्व्हरपर्यंत पोहोचू शकते याची खात्री करते (मिशनपूर्व रेडिओ संपर्क तपासण्यासारखे) ## 🧠 डेटा व्यवस्थापन इकोसिस्टमचा आढावा ```mermaid mindmap root((Data Management)) Authentication Flow Login Process Form Validation Credential Verification Session Management User State Global Account Object Navigation Guards Error Handling API Communication Fetch Patterns GET Requests POST Requests Error Responses Data Formats JSON Processing URL Encoding Response Parsing Dynamic UI Updates DOM Manipulation Safe Text Updates Element Creation Template Cloning User Experience Real-time Updates Error Messages Loading States Security Considerations XSS Prevention textContent Usage Input Sanitization Safe HTML Creation CORS Handling Cross-Origin Requests Header Configuration Development Setup ``` **मुख्य तत्त्व**: आधुनिक वेब अॅप्लिकेशन्स डेटा ऑर्केस्ट्रेशन सिस्टम आहेत - ते वापरकर्ता इंटरफेस, सर्व्हर API आणि ब्राउझर सुरक्षा मॉडेल्समध्ये समन्वय साधतात जे अखंड, प्रतिसादात्मक अनुभव तयार करतात. --- ## आधुनिक वेब अॅप्समध्ये डेटा फेचिंग समजून घेणे वेब अॅप्लिकेशन्स डेटा कसे हाताळतात यामध्ये गेल्या दोन दशकांत नाट्यमय बदल झाला आहे. आधुनिक तंत्रज्ञान जसे की AJAX आणि Fetch API का इतके शक्तिशाली आहेत आणि वेब डेव्हलपर्ससाठी आवश्यक साधने का बनली आहेत हे समजून घेण्यासाठी ही उत्क्रांती समजून घेणे महत्त्वाचे आहे. चला पारंपरिक वेबसाइट्स कशा कार्य करायच्या याचा आणि आज आपण तयार करत असलेल्या डायनॅमिक, प्रतिसादात्मक अॅप्लिकेशन्सचा अभ्यास करूया. ### पारंपरिक मल्टी-पेज अॅप्लिकेशन्स (MPA) वेबच्या सुरुवातीच्या काळात, प्रत्येक क्लिक जुन्या टेलिव्हिजनवर चॅनेल बदलण्यासारखे होते - स्क्रीन रिकामी होई, नंतर हळूहळू नवीन सामग्रीमध्ये ट्यून होई. ही सुरुवातीच्या वेब अॅप्लिकेशन्सची वास्तविकता होती, जिथे प्रत्येक संवाद संपूर्ण पृष्ठ पुन्हा तयार करण्याचा अर्थ होता. ```mermaid sequenceDiagram participant User participant Browser participant Server User->>Browser: Clicks link or submits form Browser->>Server: Requests new HTML page Note over Browser: Page goes blank Server->>Browser: Returns complete HTML page Browser->>User: Displays new page (flash/reload) ```  **हा दृष्टिकोन क्लंकी का वाटला:** - प्रत्येक क्लिकने संपूर्ण पृष्ठ पुन्हा तयार करणे आवश्यक होते - वापरकर्त्यांना त्या त्रासदायक पृष्ठ फ्लॅशेसने विचारमग्नतेत व्यत्यय आला - तुमचे इंटरनेट कनेक्शन पुन्हा पुन्हा समान हेडर आणि फूटर्स डाउनलोड करण्यात व्यस्त होते - अॅप्स सॉफ्टवेअर वापरण्यापेक्षा फाइलिंग कॅबिनेटमधून क्लिक करण्यासारखे वाटले ### आधुनिक सिंगल-पेज अॅप्लिकेशन्स (SPA) AJAX (असिंक्रोनस जावास्क्रिप्ट आणि XML) ने ही पद्धत पूर्णपणे बदलली. जसे आंतरराष्ट्रीय स्पेस स्टेशनचे मॉड्यूलर डिझाइन, जिथे अंतराळवीर संपूर्ण संरचना पुन्हा तयार न करता वैयक्तिक घटक बदलू शकतात, AJAX आम्हाला संपूर्ण पृष्ठ पुन्हा लोड न करता वेबपृष्ठाचा विशिष्ट भाग अपडेट करण्याची परवानगी देते. नावात XMLचा उल्लेख असूनही, आपण आज प्रामुख्याने JSON वापरतो, परंतु मुख्य तत्त्व कायम आहे: फक्त बदलण्याची गरज असलेला भाग अपडेट करा. ```mermaid sequenceDiagram participant User participant Browser participant JavaScript participant Server User->>Browser: Interacts with page Browser->>JavaScript: Triggers event handler JavaScript->>Server: Fetches only needed data Server->>JavaScript: Returns JSON data JavaScript->>Browser: Updates specific page elements Browser->>User: Shows updated content (no reload) ```  **SPAs चांगले का वाटतात:** - फक्त बदललेले भाग अपडेट होतात (चतुर, बरोबर?) - त्रासदायक व्यत्यय नाही - तुमचे वापरकर्ते त्यांच्या प्रवाहात राहतात - वायरवर कमी डेटा प्रवास करतो म्हणजे जलद लोडिंग - सर्व काही स्नॅपी आणि प्रतिसादात्मक वाटते, जसे तुमच्या फोनवरील अॅप्स ### आधुनिक Fetch API कडे उत्क्रांती आधुनिक ब्राउझर [`Fetch` API](https://developer.mozilla.org/docs/Web/API/Fetch_API) प्रदान करतात, जे जुन्या [`XMLHttpRequest`](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest) ची जागा घेते. टेलिग्राफ ऑपरेट करण्याच्या आणि ईमेल वापरण्याच्या फरकासारखे, Fetch API स्वच्छ असिंक्रोनस कोडसाठी प्रॉमिसेस वापरते आणि नैसर्गिकरित्या JSON हाताळते. | वैशिष्ट्य | XMLHttpRequest | Fetch API | |---------|----------------|----------| | **सिंटॅक्स** | क्लिष्ट कॉलबॅक-आधारित | स्वच्छ प्रॉमिस-आधारित | | **JSON हाताळणी** | मॅन्युअल पार्सिंग आवश्यक | अंगभूत `.json()` पद्धत | | **त्रुटी हाताळणी** | मर्यादित त्रुटी माहिती | व्यापक त्रुटी तपशील | | **आधुनिक समर्थन** | वारसा सुसंगतता | ES6+ प्रॉमिसेस आणि async/await | > 💡 **ब्राउझर सुसंगतता**: चांगली बातमी - Fetch API सर्व आधुनिक ब्राउझरमध्ये कार्य करते! तुम्हाला विशिष्ट आवृत्त्यांबद्दल उत्सुक असल्यास, [caniuse.com](https://caniuse.com/fetch) मध्ये संपूर्ण सुसंगतता कथा आहे. > **तळटीप:** - Chrome, Firefox, Safari, आणि Edge मध्ये उत्तम प्रकारे कार्य करते (म्हणजे तुमचे वापरकर्ते जिथे आहेत तिथे) - फक्त Internet Explorer ला अतिरिक्त मदतीची गरज आहे (आणि प्रामाणिकपणे, IE ला सोडण्याची वेळ आली आहे) - आम्ही नंतर वापरणार असलेल्या एलिगंट async/await पॅटर्नसाठी तुम्हाला उत्तम प्रकारे सेट करते ### वापरकर्ता लॉगिन आणि डेटा पुनर्प्राप्ती अंमलात आणणे आता तुमच्या बँकिंग अॅपला स्थिर प्रदर्शनातून कार्यात्मक अॅप्लिकेशनमध्ये रूपांतरित करणारी लॉगिन प्रणाली अंमलात आणूया. सुरक्षित लष्करी सुविधांमध्ये वापरल्या जाणाऱ्या प्रमाणीकरण प्रोटोकॉलप्रमाणे, आम्ही वापरकर्त्याच्या क्रेडेन्शियल्सची पडताळणी करू आणि नंतर त्यांचा विशिष्ट डेटा प्रदान करू. आम्ही मूलभूत प्रमाणीकरणासह सुरुवात करून डेटा फेचिंग क्षमता जोडून हे टप्प्याटप्प्याने तयार करू. #### चरण 1: लॉगिन फंक्शन फाउंडेशन तयार करा तुमच्या `app.js` फाइल उघडा आणि नवीन `login` फंक्शन जोडा. हे वापरकर्ता प्रमाणीकरण प्रक्रिया हाताळेल: ```javascript async function login() { const loginForm = document.getElementById('loginForm'); const user = loginForm.user.value; } ``` **याचे विश्लेषण करूया:** - `async` कीवर्ड? हे जावास्क्रिप्टला सांगत आहे "अरे, या फंक्शनला कदाचित गोष्टींसाठी थांबावे लागेल" - आम्ही पृष्ठावरून आमचा फॉर्म घेत आहोत (काहीही फॅन्सी नाही, फक्त त्याचा ID शोधत आहोत) - नंतर आम्ही वापरकर्त्याने टाइप केलेले युजरनेम काढत आहोत - एक छान ट्रिक: तुम्ही HTML मधील `name` अॅट्रिब्युटने सेट केलेल्या कोणत्याही फॉर्म इनपुटला फॉर्म एलिमेंटच्या प्रॉपर्टी म्हणून ऍक्सेस करू शकता - अतिरिक्त getElementById कॉल्सची गरज नाही! > 💡 **फॉर्म ऍक्सेस पॅटर्न**: प्रत्येक फॉर्म कंट्रोलला त्याच्या नावाने (HTML मध्ये `name` अॅट्रिब्युट वापरून सेट केलेले) फॉर्म एलिमेंटच्या प्रॉपर्टी म्हणून ऍक्सेस करता येते. हे फॉर्म डेटा मिळवण्याचा स्वच्छ, वाचनीय मार्ग प्रदान करते. #### चरण 2: अकाउंट डेटा फेचिंग फंक्शन तयार करा पुढे, आम्ही सर्व्हरवरून अकाउंट डेटा पुनर्प्राप्त करण्यासाठी समर्पित फंक्शन तयार करू. हे तुमच्या रजिस्ट्रेशन फंक्शनसारखेच पॅटर्न फॉलो करते पण डेटा पुनर्प्राप्तीवर लक्ष केंद्रित करते: ```javascript async function getAccount(user) { try { const response = await fetch('//localhost:5000/api/accounts/' + encodeURIComponent(user)); return await response.json(); } catch (error) { return { error: error.message || 'Unknown error' }; } } ``` **हे कोड काय साध्य करते:** - आधुनिक `fetch` API वापरून डेटा असिंक्रोनसपणे विनंती करते - युजरनेम पॅरामीटरसह GET विनंती URL तयार करते - URL मध्ये विशेष वर्ण सुरक्षितपणे हाताळण्यासाठी `encodeURIComponent()` लागू करते - JSON स्वरूपात प्रतिसाद रूपांतरित करते जेणेकरून डेटा सहजपणे हाताळता येईल - त्रुटी सौम्यपणे हाताळते, क्रॅश होण्याऐवजी त्रुटी ऑब्जेक्ट परत करते > ⚠️ **सुरक्षा टीप**: `encodeURIComponent()` फंक्शन URL मध्ये विशेष वर्ण हाताळते. नेव्हल कम्युनिकेशन्समध्ये वापरल्या जाणाऱ्या एन्कोडिंग सिस्टम्ससारखे, ते तुमचा संदेश नेमका अपेक्षित असल्याप्रमाणे पोहोचतो याची खात्री करते, "#" किंवा "&" सारख्या वर्णांना चुकीच्या प्रकारे समजण्यापासून प्रतिबंधित करते. > **महत्त्व का आहे:** - विशेष वर्ण URL तोडण्यापासून प्रतिबंधित करते - URL मॅनिप्युलेशन हल्ल्यांपासून संरक्षण करते - तुमच्या सर्व्हरला अपेक्षित डेटा प्राप्त होतो याची खात्री करते - सुरक्षित कोडिंग पद्धतींचे अनुसरण करते #### HTTP GET विनंत्या समजून घेणे तुम्हाला आश्चर्य वाटेल: जेव्हा तुम्ही `fetch` अतिरिक्त पर्यायांशिवाय वापरता, तेव्हा ते आपोआप [`GET`](https://developer.mozilla.org/docs/Web/HTTP/Methods/GET) विनंती तयार करते. हे आपल्यासाठी योग्य आहे - सर्व्हरला विचारणे "अरे, मी या वापरकर्त्याचा अकाउंट डेटा पाहू शकतो का?" GET विनंत्या पुस्तकालयातून पुस्तक उधार घेण्यासारख्या आहेत - तुम्ही आधीच अस्तित्वात असलेल्या गोष्टी पाहण्याची विनंती करत आहात. POST विनंत्या (ज्या आम्ही नोंदणीसाठी वापरल्या) संग्रहात जोडण्यासाठी नवीन पुस्तक सबमिट करण्यासारख्या आहेत. | GET विनंती | POST विनंती | |-------------|-------------| | **उद्देश** | विद्यमान डेटा पुनर्प्राप्त करा | सर्व्हरला नवीन डेटा पाठवा | | **पॅरामीटर्स** | URL पथ/क्वेरी स्ट्रिंगमध्ये | विनंती बॉडीमध्ये | | **कॅशिंग** | ब्राउझरद्वारे कॅश केले जाऊ शकते | सामान्यतः कॅश केले जात नाही | | **सुरक्षा** | URL/लॉगमध्ये दृश्यमान | विनंती बॉडीमध्ये लपलेले | ```mermaid sequenceDiagram participant B as Browser participant S as Server Note over B,S: GET Request (Data Retrieval) B->>S: GET /api/accounts/test S-->>B: 200 OK + Account Data Note over B,S: POST Request (Data Submission) B->>S: POST /api/accounts + New Account Data S-->>B: 201 Created + Confirmation Note over B,S: Error Handling B->>S: GET /api/accounts/nonexistent S-->>B: 404 Not Found + Error Message ``` #### चरण 3: सर्व काही एकत्र आणणे आता समाधानकारक भाग - चला तुमच्या अकाउंट फेचिंग फंक्शनला लॉगिन प्रक्रियेशी जोडूया. येथे सर्व काही जागेवर क्लिक करते: ```javascript async function login() { const loginForm = document.getElementById('loginForm'); const user = loginForm.user.value; const data = await getAccount(user); if (data.error) { return console.log('loginError', data.error); } account = data; navigate('/dashboard'); } ``` हे फंक्शन स्पष्ट क्रम अनुसरण करते: - फॉर्म इनपुटमधून युजरनेम काढा - सर्व्हरकडून वापरकर्त्याचा अकाउंट डेटा विनंती करा - प्रक्रियेदरम्यान उद्भवलेल्या कोणत्याही त्रुटी हाताळा - अकाउंट डेटा स्टोअर करा आणि यशस्वी झाल्यावर डॅशबोर्डवर जा > 🎯 **Async/Await पॅटर्न**: कारण `getAccount` एक असिंक्रोनस फंक्शन आहे, आम्ही `await` कीवर्ड वापरतो जो सर्व्हर प्रतिसाद देईपर्यंत अंमलबजावणी थांबवतो. हे कोड undefined डेटासह पुढे जाण्यापासून प्रतिबंधित करते. #### चरण 4: तुमच्या डेटासाठी घर तयार करणे तुमच्या अॅपला एक ठिकाण हवे जे एकदा लोड झाल्यानंतर अकाउंट माहिती लक्षात ठेवेल. याला तुमच्या अॅपची अल्पकालीन स्मृती समजा - सध्याच्या वापरकर्त्याचा डेटा सोयीस्कर ठेवण्यासाठी एक जागा. तुमच्या `app.js` फाइलच्या शीर्षस्थानी ही ओळ जोडा: ```javascript // This holds the current user's account data let account = null; ``` **आपल्याला याची आवश्यकता का आहे:** - अकाउंट डेटा तुमच्या अॅपमधील कुठूनही ऍक्सेस करण्यायोग्य ठेवते - `null` सह प्रारंभ करणे म्हणजे "कोणीही अद्याप लॉग इन केलेले नाही" - कोणी यशस्वीरित्या लॉग इन किंवा नोंदणी केल्यावर अपडेट होते - एकल सत्याचा स्रोत म्हणून कार्य करते - कोण लॉग इन आहे याबद्दल गोंधळ नाही #### चरण 5: तुमचा फॉर्म वायर करा आता तुमच्या चमकदार नवीन लॉगिन फंक्शनला तुमच्या HTML फॉर्मशी कनेक्ट करूया. तुमच्या फॉर्म टॅगला असे अपडेट करा: ```html
``` **हा छोटासा बदल काय करतो:** - फॉर्मला त्याचे डीफॉल्ट "संपूर्ण पृष्ठ पुन्हा लोड करा" वर्तन थांबवते - त्याऐवजी तुमचे कस्टम जावास्क्रिप्ट फंक्शन कॉल करते - सर्व काही गुळगुळीत आणि सिंगल-पेज-अॅपसारखे ठेवते - वापरकर्त्यांनी "लॉगिन" दाबल्यावर काय होते यावर तुम्हाला पूर्ण नियंत्रण देते #### चरण 6: तुमच्या रजिस्ट्रेशन फंक्शनला सुधारित करा सुसंगततेसाठी, तुमच्या `register` फंक्शनला अकाउंट डेटा स्टोअर करण्यासाठी आणि डॅशबोर्डवर नेव्हिगेट करण्यासाठी देखील अपडेट करा: ```javascript // Add these lines at the end of your register function account = result; navigate('/dashboard'); ``` **ही सुधारणा DOM मॅनिप्युलेशन ही एक तंत्र आहे जी स्थिर वेब पृष्ठांना गतिशील अनुप्रयोगांमध्ये रूपांतरित करते, जे वापरकर्त्याच्या संवादांवर आणि सर्व्हर प्रतिसादांवर आधारित सामग्री अद्यतनित करतात. ### योग्य साधन निवडणे तुमच्या HTML ला JavaScript सह अद्यतनित करण्याचा विचार करत असाल, तर तुमच्याकडे अनेक पर्याय आहेत. यांना टूलबॉक्समधील वेगवेगळ्या साधनांसारखे समजा - प्रत्येक विशिष्ट कामासाठी योग्य: | पद्धत | कशासाठी चांगली आहे | कधी वापरायची | सुरक्षिततेचा स्तर | |-------|---------------------|--------------|--------------------| | `textContent` | वापरकर्त्याचा डेटा सुरक्षितपणे दाखवणे | कधीही तुम्ही मजकूर दाखवत असाल | ✅ अतिशय सुरक्षित | | `createElement()` + `append()` | जटिल लेआउट तयार करणे | नवीन विभाग/यादी तयार करणे | ✅ अतिशय सुरक्षित | | `innerHTML` | HTML सामग्री सेट करणे | ⚠️ शक्यतो टाळा | ❌ धोकादायक | #### मजकूर सुरक्षितपणे दाखवण्याचा सुरक्षित मार्ग: textContent [`textContent`](https://developer.mozilla.org/docs/Web/API/Node/textContent) प्रॉपर्टी वापरकर्त्याचा डेटा दाखवण्यासाठी तुमचा सर्वोत्तम मित्र आहे. हे तुमच्या वेबपृष्ठासाठी बाउन्सर असल्यासारखे आहे - काहीही हानिकारक आत येत नाही: ```javascript // The safe, reliable way to update text const balanceElement = document.getElementById('balance'); balanceElement.textContent = account.balance; ``` **textContent चे फायदे:** - सर्वकाही सामान्य मजकूर म्हणून हाताळते (स्क्रिप्ट कार्यान्वयन टाळते) - विद्यमान सामग्री आपोआप साफ करते - सोप्या मजकूर अद्यतनांसाठी कार्यक्षम - हानिकारक सामग्रीपासून अंगभूत सुरक्षा प्रदान करते #### गतिशील HTML घटक तयार करणे अधिक जटिल सामग्रीसाठी, [`document.createElement()`](https://developer.mozilla.org/docs/Web/API/Document/createElement) आणि [`append()`](https://developer.mozilla.org/docs/Web/API/ParentNode/append) पद्धती एकत्र करा: ```javascript // Safe way to create new elements const transactionItem = document.createElement('div'); transactionItem.className = 'transaction-item'; transactionItem.textContent = `${transaction.date}: ${transaction.description}`; container.append(transactionItem); ``` **या दृष्टिकोनाचे समजून घेणे:** - **नवीन DOM घटक** प्रोग्रामॅटिकली तयार करते - घटकांचे गुणधर्म आणि सामग्रीवर **पूर्ण नियंत्रण ठेवते** - **जटिल, नेस्टेड घटक संरचना** तयार करण्यास अनुमती देते - **सुरक्षा जपते** संरचना आणि सामग्री वेगळे करून > ⚠️ **सुरक्षा विचार**: जरी [`innerHTML`](https://developer.mozilla.org/docs/Web/API/Element/innerHTML) अनेक ट्यूटोरियलमध्ये दिसते, तरीही ते एम्बेड केलेल्या स्क्रिप्ट्स कार्यान्वित करू शकते. CERN मधील सुरक्षा प्रोटोकॉलप्रमाणे जे अनधिकृत कोड कार्यान्वयन टाळतात, `textContent` आणि `createElement` वापरणे सुरक्षित पर्याय प्रदान करते. > **innerHTML चे धोके:** - वापरकर्त्याच्या डेटामधील कोणत्याही `