# بینکنگ ایپ بنائیں حصہ 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 ``` **بنیادی اصول**: جدید ویب ایپلیکیشنز ڈیٹا آرکسٹریشن سسٹمز ہیں - وہ صارف انٹرفیس، سرور APIs، اور براؤزر سیکیورٹی ماڈلز کے درمیان ہم آہنگی پیدا کرتے ہیں تاکہ ہموار، جوابدہ تجربات تخلیق کیے جا سکیں۔ --- ## جدید ویب ایپس میں ڈیٹا حاصل کرنے کو سمجھنا ویب ایپلیکیشنز کے ڈیٹا کو ہینڈل کرنے کا طریقہ گزشتہ دو دہائیوں میں ڈرامائی طور پر تبدیل ہوا ہے۔ اس ارتقاء کو سمجھنا آپ کو یہ سمجھنے میں مدد دے گا کہ جدید تکنیکیں جیسے 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) ``` ![ملٹی پیج ایپلیکیشن میں اپ ڈیٹ ورک فلو](../../../../translated_images/mpa.7f7375a1a2d4aa779d3f928a2aaaf9ad76bcdeb05cfce2dc27ab126024050f51.ur.png) **یہ طریقہ کیوں بھاری محسوس ہوتا تھا:** - ہر کلک کا مطلب پورے صفحے کو شروع سے دوبارہ تعمیر کرنا تھا - صارفین کو ان پریشان کن صفحہ فلیشز کے ذریعے سوچ کے درمیان میں خلل پڑتا تھا - آپ کا انٹرنیٹ کنکشن بار بار وہی ہیڈر اور فوٹر ڈاؤن لوڈ کرنے میں زیادہ کام کرتا تھا - ایپس زیادہ فائلنگ کابینہ کے ذریعے کلک کرنے جیسی محسوس ہوتی تھیں بجائے سافٹ ویئر استعمال کرنے کے ### جدید سنگل پیج ایپلیکیشنز (SPA) AJAX (Asynchronous JavaScript and 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) ``` ![سنگل پیج ایپلیکیشن میں اپ ڈیٹ ورک فلو](../../../../translated_images/spa.268ec73b41f992c2a21ef9294235c6ae597b3c37e2c03f0494c2d8857325cc57.ur.png) **SPA کیوں بہتر محسوس ہوتی ہیں:** - صرف وہ حصے جو واقعی تبدیل ہوئے ہیں اپ ڈیٹ ہوتے ہیں (سمارٹ، ہے نا؟) - مزید جھٹکے دار خلل نہیں - آپ کے صارفین اپنی روانی میں رہتے ہیں - تار پر کم ڈیٹا سفر کرتا ہے جس کا مطلب ہے تیز لوڈنگ - سب کچھ تیز اور جوابدہ محسوس ہوتا ہے، جیسے آپ کے فون پر ایپس ### جدید 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) کے پاس مکمل مطابقت کی کہانی ہے۔ > **خلاصہ:** - کروم، فائر فاکس، سفاری، اور ایج میں بہترین کام کرتا ہے (بنیادی طور پر جہاں آپ کے صارفین ہیں) - صرف انٹرنیٹ ایکسپلورر کو اضافی مدد کی ضرورت ہے (اور ایمانداری سے، اب وقت آ گیا ہے کہ IE کو الوداع کہا جائے) - آپ کو بعد میں استعمال ہونے والے خوبصورت async/await پیٹرنز کے لیے بالکل تیار کرتا ہے ### صارف لاگ ان اور ڈیٹا کی بازیابی کو نافذ کرنا اب آئیے لاگ ان سسٹم کو نافذ کریں جو آپ کی بینکنگ ایپ کو جامد ڈسپلے سے ایک فعال ایپلیکیشن میں تبدیل کرتا ہے۔ جیسے محفوظ فوجی سہولیات میں استعمال ہونے والے تصدیقی پروٹوکول، ہم صارف کی اسناد کی تصدیق کریں گے اور پھر ان کے مخصوص ڈیٹا تک رسائی فراہم کریں گے۔ ہم اسے بتدریج بنائیں گے، بنیادی تصدیق سے شروع کرتے ہوئے اور پھر ڈیٹا حاصل کرنے کی صلاحیتوں کو شامل کریں گے۔ #### مرحلہ 1: لاگ ان فنکشن کی بنیاد بنائیں اپنی `app.js` فائل کھولیں اور ایک نیا `login` فنکشن شامل کریں۔ یہ صارف کی تصدیق کے عمل کو ہینڈل کرے گا: ```javascript async function login() { const loginForm = document.getElementById('loginForm'); const user = loginForm.user.value; } ``` **آئیے اسے توڑ کر دیکھتے ہیں:** - وہ `async` کلیدی لفظ؟ یہ جاوا اسکرپٹ کو بتا رہا ہے "ارے، اس فنکشن کو چیزوں کے انتظار کی ضرورت ہو سکتی ہے" - ہم اپنے صفحے سے فارم کو پکڑ رہے ہیں (کچھ خاص نہیں، بس اسے اس کے ID کے ذریعے تلاش کر رہے ہیں) - پھر ہم جو کچھ بھی صارف نے اپنا یوزر نیم کے طور پر ٹائپ کیا ہے اسے نکال رہے ہیں - یہاں ایک زبردست چال ہے: آپ کسی بھی فارم ان پٹ کو اس کے `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 یوزر نیم پیرامیٹر کے ساتھ - **لاگو کرتا ہے** `encodeURIComponent()` خاص کرداروں کو URLs میں محفوظ طریقے سے ہینڈل کرنے کے لیے - **تبدیل کرتا ہے** جواب کو JSON فارمیٹ میں آسان ڈیٹا ہیرا پھیری کے لیے - **ایررز کو ہینڈل کرتا ہے** گریس فلی طور پر ایرر آبجیکٹ واپس کر کے بجائے کریش ہونے کے > ⚠️ **سیکیورٹی نوٹ**: `encodeURIComponent()` فنکشن URLs میں خاص کرداروں کو ہینڈل کرتا ہے۔ جیسے بحری مواصلات میں استعمال ہونے والے انکوڈنگ سسٹمز، یہ یقینی بناتا ہے کہ آپ کا پیغام بالکل اسی طرح پہنچے جیسا کہ ارادہ کیا گیا تھا، "#" یا "&" جیسے کرداروں کو غلط تشریح سے روکنا۔ > **یہ کیوں اہم ہے:** - خاص کرداروں کو URLs کو توڑنے سے روکتا ہے - 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` کلیدی لفظ استعمال کرتے ہیں تاکہ سرور کے جواب تک عمل کو روک سکیں۔ یہ کوڈ کو غیر متعین ڈیٹا کے ساتھ جاری رکھنے سے روکتا ہے۔ #### مرحلہ 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'); ``` **یہ بہتری فراہم کرتی ہے:** - **ہموار** رجسٹریشن سے ڈیش بورڈ تک منتقلی - **مطابقت پذیر** صارف تجربہ لاگ ان اور رجسٹریشن کے بہاؤ کے درمیان - **فوری** کامیاب رجسٹریشن کے بعد اکاؤنٹ ڈیٹا تک رسائی #### اپنی عملدرآمد کی جانچ کرنا ```mermaid flowchart TD A[User enters credentials] --> B[Login function called] B --> C[Fetch account data from server] C --> D{Data received successfully?} D -->|Yes| E[Store account data globally] D -->|No| F[Display error message] E --> G[Navigate to dashboard] F --> H[User stays on login page] ``` **اب اسے آزمائیں:** 1. نیا اکاؤنٹ بنائیں تاکہ یہ یقینی بنایا جا سکے کہ سب کچھ کام کر رہا ہے 2. انہی اسناد کے ساتھ لاگ ان کرنے کی کوشش کریں 3. اگر کچھ غلط لگے تو اپنے براؤزر کے کنسول (F12) پر جھانکیں 4. کامیاب لاگ ان کے بعد ڈیش بورڈ پر پہنچنے کو یقینی بنائیں اگر کچھ کام نہیں کر رہا ہے، تو گھبرائیں نہیں! زیادہ تر مسائل آسان اصلاحات ہیں جیسے ٹائپوز یا API سرور شروع کرنا بھول جانا۔ #### کراس-اورجن جادو کے بارے میں ایک مختصر بات آپ سوچ رہے ہوں گے: "میری ویب ایپ اس API سرور سے کیسے بات کر رہی ہے جب وہ مختلف پورٹس پر چل رہے ہیں؟" زبرد ڈوم مینپولیشن وہ تکنیک ہے جو جامد ویب صفحات کو متحرک ایپلیکیشنز میں تبدیل کرتی ہے، جو صارف کی تعاملات اور سرور کے جوابات کی بنیاد پر اپنے مواد کو اپ ڈیٹ کرتی ہیں۔ ### کام کے لیے صحیح ٹول کا انتخاب جب جاوا اسکرپٹ کے ذریعے اپنے HTML کو اپ ڈیٹ کرنے کی بات آتی ہے، تو آپ کے پاس کئی اختیارات ہوتے ہیں۔ ان کو ایک ٹول باکس میں مختلف ٹولز کی طرح سمجھیں - ہر ایک مخصوص کام کے لیے بہترین ہے: | طریقہ | کس کے لیے بہترین ہے | کب استعمال کریں | حفاظت کی سطح | |-------|---------------------|------------------|--------------| | `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); ``` **اس طریقے کو سمجھنا:** - **پروگرام کے ذریعے** نئے ڈوم عناصر بناتا ہے - **عنصر کی خصوصیات اور مواد** پر مکمل کنٹرول برقرار رکھتا ہے - **پیچیدہ، گھنے عنصر کے ڈھانچے** کی اجازت دیتا ہے - **سیکیورٹی کو برقرار رکھتا ہے** ساخت کو مواد سے الگ کر کے > ⚠️ **سیکیورٹی پر غور کریں**: حالانکہ [`innerHTML`](https://developer.mozilla.org/docs/Web/API/Element/innerHTML) بہت سے ٹیوٹوریلز میں ظاہر ہوتا ہے، یہ شامل اسکرپٹس کو چلا سکتا ہے۔ جیسے CERN کے سیکیورٹی پروٹوکول غیر مجاز کوڈ کے عمل کو روکنے کے لیے کام کرتے ہیں، `textContent` اور `createElement` کا استعمال محفوظ متبادل فراہم کرتا ہے۔ > **innerHTML کے خطرات:** - صارف کے ڈیٹا میں موجود کسی بھی `