कितने सुरक्षित छिपे हुए AJAX अनुरोध हैं कि नकली प्रदर्शन?


48

एक छिपा AJAX अनुरोध क्या है?

मैंने उपयोगकर्ता के कार्य को तुरंत करने के लिए डिज़ाइन किए गए AJAX अनुरोधों के उपयोग में वृद्धि देखी है। मैं इस प्रकार के AJAX अनुरोध को गैर-अवरोधक के रूप में संदर्भित करूँगा। यह AJAX अनुरोध है जो उपयोगकर्ता को पता चले बिना हो रहा है, यह पृष्ठभूमि में किया गया है और यह ऑपरेशन चुप है ( AJAX कॉल के सफल समापन को इंगित करने के लिए कोई क्रिया नहीं है )। लक्ष्य ऑपरेशन को प्रकट करना है कि यह तुरंत हुआ है जब यह वास्तव में समाप्त नहीं हुआ है।

यहां गैर-अवरुद्ध AJAX अनुरोध के उदाहरण हैं;

  • उपयोगकर्ता क्लिक ईमेल के संग्रह पर हटाते हैं। आइटम अपने इनबॉक्स से तुरंत गायब हो जाते हैं, और वे अन्य कार्यों के साथ जारी रख सकते हैं। इस बीच, एक AJAX अनुरोध पृष्ठभूमि में आइटम को हटाने की प्रक्रिया कर रहा है।
  • उपयोगकर्ता नए रिकॉर्ड के लिए एक फॉर्म भरता है। सेव पर क्लिक करता है। नया आइटम तुरंत सूची में दिखाई देता है। उपयोगकर्ता नए रिकॉर्ड जोड़ना जारी रख सकता है।

स्पष्ट करने के लिए, यहां AJAX अनुरोध को अवरुद्ध करने के उदाहरण हैं;

  • उपयोगकर्ता क्लिक ईमेल के संग्रह पर हटाते हैं। एक घंटा चश्मा दिखाई देता है। AJAX का अनुरोध किया जाता है, और जब यह प्रतिक्रिया करता है कि प्रति घंटा कर्सर बंद हो जाता है। ऑपरेशन को पूरा करने के लिए उपयोगकर्ता को एक सेकंड इंतजार करना होगा।
  • उपयोगकर्ता नए रिकॉर्ड के लिए एक फॉर्म भरता है। सेव पर क्लिक करता है। AJAX लोडर एनिमेशन के साथ फ़ॉर्म ग्रे हो जाता है। एक संदेश "आपका डेटा सहेजा गया" दिखाया गया है, और सूची में नया रिकॉर्ड दिखाई देता है।

दो उपर्युक्त परिदृश्यों के बीच अंतर यह है कि एक गैर-अवरुद्ध AJAX सेटअप ऑपरेटिंग प्रदर्शन की प्रतिक्रिया प्रदान नहीं करता है, और एक अवरुद्ध AJAX सेटअप करता है।

छिपे हुए AJAX अनुरोधों का जोखिम

AJAX अनुरोध की इस शैली का सबसे बड़ा जोखिम यह है कि AJAX अनुरोध विफल होने पर वेब एप्लिकेशन पूरी तरह से अलग स्थिति में हो सकता है।

उदाहरण के लिए, एक गैर-अवरुद्ध उदाहरण;

  • उपयोगकर्ता ईमेल का एक गुच्छा चुनता है। डिलीट बटन पर क्लिक करता है। ऑपरेशन तुरंत होता है (आइटम केवल सूची से गायब हो जाते हैं)। उपयोगकर्ता तब कंपोज़ बटन पर क्लिक करता है और एक नया ईमेल लिखना शुरू करता है। यह इस समय है कि जावास्क्रिप्ट कोड को पता चलता है कि AJAX अनुरोध विफल हो गया है। स्क्रिप्ट त्रुटि संदेश दिखा सकती है, लेकिन यह वास्तव में इस समय व्यर्थ है।

वैकल्पिक रूप से, एक अवरुद्ध उदाहरण;

  • उपयोगकर्ता ईमेल का एक गुच्छा चुनता है। डिलीट बटन पर क्लिक करता है। एक घंटे का ग्लास देखता है, लेकिन ऑपरेशन विफल हो जाता है। उन्हें एक त्रुटि संदेश मिला है जिसमें कहा गया है "त्रुटि। ब्ला ब्ला ब्ला"। वे ईमेल की सूची में वापस आ जाते हैं, और उनके पास अभी भी वे ईमेल हैं जिन्हें वे हटाना चाहते थे। वे उन्हें फिर से हटाने का प्रयास कर सकते थे।

गैर-अवरुद्ध AJAX अनुरोध करने के लिए अन्य तकनीकी जोखिम भी हैं। उपयोगकर्ता ब्राउज़र को बंद कर सकता है, किसी अन्य वेबसाइट पर नेविगेट कर सकता है और वे वर्तमान वेब में किसी अन्य स्थान पर नेविगेट कर सकते हैं जो किसी भी त्रुटि प्रतिक्रिया के संदर्भ को बेकार बनाता है।

तो यह लोकप्रिय क्यों हो रहा है?

Facebook, Google, Microsoft, आदि .. आदि। ये सभी बड़े डोमेन तेजी से गैर-अवरुद्ध AJAX अनुरोधों का उपयोग कर रहे हैं, जिससे यह प्रतीत होता है कि वे तुरंत प्रदर्शित होते हैं। मैंने ऐसे फॉर्म संपादकों में भी वृद्धि देखी है जिनके पास कोई सेव या सबमिट बटन नहीं है । जैसे ही आप कोई फ़ील्ड छोड़ते हैं या एंटर दबाते हैं। मान बच जाता है। ऐसा नहीं है कि आपका प्रोफ़ाइल अपडेट किया गया संदेश या बचत चरण नहीं है।

AJAX अनुरोध एक निश्चितता नहीं है, और उन्हें तब तक सफल नहीं माना जाना चाहिए जब तक कि वे पूर्ण न हो जाएं, लेकिन बहुत सारे प्रमुख वेब एप्लिकेशन उसी तरह काम कर रहे हैं।

क्या ये वेबसाइटें जो गैर-अवरोधक AJAX कॉल का उपयोग करती हैं, वे तेजी से दिखने की कीमत पर एक अनावश्यक जोखिम उठाते हुए उत्तरदायी अनुप्रयोगों का अनुकरण करती हैं?

क्या यह एक ऐसा डिज़ाइन पैटर्न है जिसे प्रतिस्पर्धी बने रहने के लिए हम सभी को अनुसरण करना चाहिए?


20
यह इस तथ्य से उचित है कि सफल संचालन की अधिक संभावना है, इसलिए केवल अति-आशावादी प्रतिक्रिया के दुर्लभ मामले से बचने के लिए धीमा होना एक बुरा व्यापार है। व्यक्तिगत संबंधों के लिए प्रेषित, क्या आप एक शांत, सनी व्यक्ति या स्पष्ट रूप से बातचीत करते हैं जो स्पष्ट रूप से मानता है कि जो कुछ गलत हो सकता है वह गलत होगा और तदनुसार कार्य करेगा?
किलिऑन फोथ

1
मेरे लिए, मैं जो संघर्ष कर रहा हूं, वह यह है कि एक डेस्कटॉप एप्लिकेशन में ऑपरेशन और त्रुटि दोनों होते हैं। जहां वेब अनुप्रयोगों के साथ ऑपरेशन तुरंत होता है, लेकिन त्रुटि पिछड़ जाती है। फिर भी, साइटें डेस्कटॉप एप्लिकेशन के डिजाइन के साथ काम करती हैं।
रिएक्टगुलर

7
क्या आपने यह भी विचार किया है कि जब आपका डेस्कटॉप एप्लिकेशन डिस्क पर लिखता है तो क्या होता है, यह वास्तव में एक ओएस बफर में चला जाता है, और इससे पहले कि यह प्लेटर पर लिखा जा सकता है, डिस्क विफल हो जाती है? या, उस मामले के लिए, डिस्क को प्लेटर पर लिखे जाने के बाद विफल हो जाता है। दोनों मामलों में, उपयोगकर्ता सोचता है कि कुछ ऐसा हुआ है जब यह वास्तव में नहीं हुआ है।
kdgregory

2
@KilianFoth मैं वही पसंद करूंगा जो मानता है कि सब कुछ गलत हो सकता है, अगर "धूप" व्यक्ति आपको पंच करने जा रहा है और मुसीबत के पहले संकेत पर आपका बटुआ चुरा रहा है। इसलिए यह विफलता पर पेज की प्रतिक्रिया के पैमाने पर निर्भर करता है।
इज़काता

1
@ButtleButkus मुझे लगता है कि बचत करने वाले संदेश नए हैं। जब मैंने सवाल पूछा तो वे वहां नहीं थे। मैंने देखा है कि हाल ही में पृष्ठभूमि में सामान कर रही है और अधिक प्रतिक्रिया जोड़ने के लिए गूगल।
रिएक्टगुलर

जवाबों:


62

यह वास्तविक जवाबदेही के रूप में इतना "नकली" प्रदर्शन नहीं है। इसके लोकप्रिय होने के कई कारण हैं:

  • इंटरनेट कनेक्शन आजकल काफी विश्वसनीय हैं। AJAX अनुरोध विफल होने का जोखिम बहुत कम है।
  • जो ऑपरेशन किए जा रहे हैं वे वास्तव में सुरक्षा महत्वपूर्ण नहीं हैं। यदि आपके ईमेल सर्वर पर डिलीट नहीं होते हैं, तो सबसे बुरा यह होता है कि अगली बार जब आप पेज पर आते हैं तो आपको उन्हें फिर से डिलीट करना पड़ता है।
  • यदि अनुरोध विफल हो जाता है तो आप कार्रवाई को पूर्ववत करने के लिए अपना पेज डिज़ाइन कर सकते हैं, लेकिन आपको वास्तव में वह सूक्ष्म नहीं होना चाहिए क्योंकि इसका मतलब है कि सर्वर से आपका संपर्क टूट गया है। यह कहना आसान है "कनेक्शन खो गया है। हाल के परिवर्तनों को सहेजने में असमर्थ। बाद में पुन: प्रयास करें।"
  • आप अपने पृष्ठ को केवल एक लंबित AJAX अनुरोध की अनुमति देने के लिए डिज़ाइन कर सकते हैं, जिससे आपका राज्य सर्वर से सिंक से बाहर नहीं निकलेगा।
  • यदि AJAX अनुरोध लंबित है, तो ब्राउज़र आपको चेतावनी देता है कि आप पृष्ठ से दूर या नेविगेट करने का प्रयास करते हैं।

AJAX की लंबित चेतावनी


8
वह आखिरी बिंदु, क्या सभी ब्राउज़र डिफ़ॉल्ट रूप से ऐसा करते हैं?
शविश

मुझे नहीं पता। मैंने केवल IE9 और नवीनतम क्रोम पर इसका परीक्षण किया है।
कार्ल बेज़ेलफेल्ट

3
आप स्पष्ट रूप से ऑस्ट्रेलियाई इंटरनेट से परिचित नहीं हैं, गरीब, विकासशील, और अलग-थलग स्थानों का उल्लेख नहीं करते हैं, यहां तक ​​कि एक चलती गाड़ी पर मोबाइल ...
हिप्पिएट्रिल

2
@hippietrail खैर, आप हर किसी को हर समय खुश नहीं रख सकते।
KOVIKO

1
जब उपयोगकर्ता एक अनुरोध भेजता है, तो वह हमेशा एक नया पृष्ठ नहीं मांगता है। मुझे लगता है कि अच्छी तरह से डिज़ाइन किए गए AJAX एप्लिकेशन उन्हें अधिक सुखद बना सकते हैं, जिससे उपयोगकर्ता को यह पता चल सकता है कि रीलोड की तुलना में अधिक कुशलता से क्या हो रहा है।
फ्रेडरिक।

32

यह मानते हुए कि कुछ काम करेगा और रिमोट की ओर से विफल होने की स्थिति में किसी त्रुटि को प्रदर्शित करना, उपयोगकर्ता को कुछ और करने से रोकने की तुलना में अधिक उपयोगकर्ता के अनुकूल है जब तक कि सर्वर से कोई प्रतिक्रिया न हो।

एक ईमेल क्लाइंट वास्तव में इसके लिए एक महान उदाहरण है: जब मेरे पास 5 ईमेल के साथ एक सूची है और शीर्ष एक का चयन किया जाता है, तो मुझे उम्मीद है कि जब DELतीन बार पहले तीन ईमेल हटा दिए जाते हैं। "नॉनब्लॉकिंग एजेक्स" के साथ यह ठीक काम करता है - हर बार जब मैं कुंजी को मारता हूं तो चयनित ईमेल तुरंत हटा दिया जाता है। यदि कुछ गलत हो जाता है, तो एक त्रुटि दिखाई जाती है और या तो नहीं-ठीक से हटाए गए ईमेल फिर से दिखाए जाते हैं या असंगत स्थानीय स्थिति से छुटकारा पाने के लिए पृष्ठ को फिर से लोड किया जाता है।

तो सबसे आम मामले में - कि सफलता है - यह प्रयोज्य में सुधार करता है। में दुर्लभ मामला - विफलता - प्रयोज्य अपमानित किया जाता है (नष्ट तत्व फिर से पता चलता है या आवेदन "को पुन: प्रारंभ" है), लेकिन जब, त्रुटि के मामले में नहीं एक आवेदन आप आमतौर पर आम मामलों के लिए सबसे अच्छा प्रयोज्य करना चाहते हैं का निर्माण।


1
+1 यह मामले के दिल में हाजिर है। डिफ़ॉल्ट लोगों द्वारा इतनी सुरक्षा इन दिनों लागू होती है कि सबसे खराब स्थिति में आप अभी भी वास्तविक उपयोगकर्ता गलतियों को जोखिम में नहीं डाल रहे हैं: कल्पना करें कि ईमेल क्लाइंट को हटाने में विफल रहता है, अब स्थानीय स्थिति खराब है, और वे ईमेल 4 को हटाने की कोशिश करते हैं जो कि गलत है सर्वर के साथ, बैक-एंड देवों के विशाल बहुमत को यह सुनिश्चित करने के लिए एक सुरक्षा पकड़ होगी कि आप केवल वही हटाएं जो उपयोगकर्ता बिल्कुल चाहता है और इसलिए इस मिसलिग्न्मेंट में त्रुटिपूर्ण विलोपन नहीं होगा (यह त्रुटि में विफल हो सकता है लेकिन इसे हटा नहीं देगा) ।
जिमी हॉफ

@JimmyHoffa आप विलोपन अनुरोध में एक अद्वितीय ईमेल आईडी का उपयोग करेंगे। आपके इनबॉक्स में ईमेल के मनमाने प्रदर्शन आदेश के आधार पर डिलीट अनुरोध भेजना वास्तव में बुरा होगा।
बटल बुटकस

14

उपयोगकर्ताओं को इस बात की परवाह नहीं है कि आपका सॉफ़्टवेयर पर्दे के पीछे क्या कर रहा है: वे चाहते हैं कि उनके कार्यों पर प्रभाव दिखाई दे, और अपनी गति से काम करने में सक्षम हो।

यदि क्लाइंट पक्ष पर कोई कार्रवाई सफल रही - जैसे ईमेल हटाना - तो सर्वर साइड पर भी इसे सफल बनाना आपका काम है। विलोपन विफल क्यों हुआ? यदि यह सीमा के कुछ प्रकार की वजह से है (उदाहरण के लिए, आप एक ईमेल कि संग्रहीत किया गया है नहीं निकाल सकते), उपयोगकर्ता कि के बारे में पता किया जाना चाहिए इससे पहले कि उसकी कार्रवाई विफल रही।

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

इसे प्रबंधित करने का एक अच्छा तरीका है फेसबुक जिस तरह से चैट को हैंडल करता है। किसी उपयोगकर्ता को अचानक डिस्कनेक्ट करने से रोकने का कोई तरीका नहीं है, जिसका अर्थ है कि वे आपके द्वारा भेजे जाने से पहले भेजे गए संदेशों को नहीं पढ़ पाएंगे। सिस्टम एक त्रुटि प्रदर्शित करने के बजाय, उन सभी संदेशों को सहेजता है और वापस आने पर उपयोगकर्ता को उपलब्ध कराता है। कोई डेटा नहीं खोया है।


2
+1। उत्कृष्ट उदाहरण चैट। अधिकांश उपयोगकर्ताओं को उम्मीद है कि उनका संदेश सभी को तुरंत उपलब्ध कराया जाएगा, और चूंकि इस तरह के संदेश शायद ही कभी विफल होते हैं, इसलिए उपयोगकर्ताओं को यह भ्रम दिया जाता है कि यह मामला है।
नील

1
@ निफ़्रा, "विलोपन विफल क्यों हुआ?" नेटवर्क कई कारणों से विफल हो सकता है, जिनमें से कोई भी आपके आवेदन के साथ नहीं है। ऐसा कुछ भी नहीं है जिसे आप रोक सकें।
20

5

आप दो विकल्पों के बीच समझौता कर सकते हैं। उदाहरण के लिए, यदि उपयोगकर्ता किसी ईमेल को हटाता है, तो आप इसे तब तक लाल या ग्रे कर सकते हैं जब तक आपको सर्वर से पुष्टिकरण नहीं मिल जाता, और उसके बाद ही इसे सूची से हटाएं। उपयोगकर्ता अभी भी अन्य कार्य कर सकता है जबकि एक क्रिया लंबित है, इसलिए यह अवरुद्ध नहीं है, लेकिन यह अभी भी उपयोगकर्ता के लिए थोड़ा अनुस्मारक छोड़ देता है कि उनके कार्यों को अभी तक प्रतिबद्ध नहीं किया गया है।

अमेज़ॅन एडब्ल्यूएस इस दृष्टिकोण को लेता है: जब आप एक उदाहरण को रोकते / शुरू करते हैं, तो चेकबॉक्स जो आपको यह चुनने की अनुमति देता है कि वह एक स्पिनर में बदल जाता है (इसलिए आप इसे कुछ सेकंड के लिए कुछ भी नहीं कर सकते हैं), लेकिन यह आपको ब्लॉक नहीं करता है अन्य उदाहरणों के साथ बातचीत।


आपका सुझाव समान है कि कैसे जीएलआर एक्सएचआर जा रहा है, जबकि "सेविंग ..." टेक्स्ट दिखाता है, और "सेव्ड" होने के बाद। अगर यह हमेशा कहा जाता है "बचाया," कौन विश्वास करेगा?
ब्यूटैक बटुक

3

मुझे लगता है, यह अधिक से अधिक वेबसाइटों के साथ आता है जो अनुप्रयोगों की तरह व्यवहार करने की कोशिश करते हैं और अधिक पारंपरिक साइटों की तुलना में ब्राउज़र में अधिक प्रसंस्करण (जैसे फॉर्म डेटा को मान्य करना) करते हैं। मुझे इसमें बहुत अधिक समस्या नहीं दिखती है, जब तक कि आपका कोड विश्वसनीय है और आप इसे सामान्य परिस्थितियों में सफल होने की उम्मीद कर सकते हैं।

आप कहते हैं "यह इस समय है कि जावास्क्रिप्ट कोड AJAX अनुरोध को विफल कर देता है। स्क्रिप्ट त्रुटि संदेश दिखा सकती है, लेकिन यह वास्तव में इस समय व्यर्थ है।"

यह व्यर्थ क्यों होना चाहिए? आप ईमेल की सूची में वापस जा सकते हैं और फिर से हटा सकते हैं। इसके बजाय इंतजार क्यों करें? वास्तव में "जोखिम" का बहुत कुछ नहीं है और वे तेज होने के लिए "प्रकट" नहीं होते हैं, वे वास्तव में तेजी से काम करते हैं। तो अगर गतिविधि "महत्वपूर्ण" नहीं है तो धीमी गति से क्यों?


1
शायद निरर्थक सही शब्द नहीं था, लेकिन मेरा मतलब यह है कि त्रुटि संदेश में सापेक्ष संदर्भ का अभाव है, क्योंकि उपयोगकर्ता अब कुछ पूरी तरह से अलग कर रहा है। मैं कहने की कोशिश कर रहा हूं, यह है कि एक अज्ञानी वेब उपयोगकर्ता के लिए, उन्होंने सोचा कि ईमेल ने सफलतापूर्वक हटा दिया। तो अब क्यों, बाद में, उन्हें कुछ चीजों के लिए एक त्रुटि संदेश मिलता है जिसे उन्होंने "देखा" हटा दिया गया था। हमारे लिए प्रोग्रामर, हम समझते हैं, लेकिन दादाजी के लिए जीमेल का उपयोग कर वे समझ नहीं होगा।
रिएक्टगुलर

ज्यादातर लोग एक ऐसे एप्लिकेशन का उपयोग करेंगे जहां चीजें तुरंत होती हैं, सिस्टम उत्तरदायी है और 10,000 में से 1 मौका है कि यूआई किसी एप्लिकेशन की तुलना में एक त्रुटि पर एक अजीब तरीके से अपडेट हो सकता है जो हर बार एक सेकंड के लिए जमा होता है जब वे एक मूल्य बदलते हैं।
को रोबोट

1

मेरा 2 सी है: ऐसी स्थितियां हैं जब आपके पास बेहतर है, जैसा कि आपने इसे रखा है, "नॉन-ब्लॉकिंग" अजाक्स संचालन और अन्य जहां यह एक खराब डिजाइन विकल्प है। उदाहरण: एक YouTube वीडियो को वोट करना। आप वास्तव में पेज के किसी भी हिस्से को अवरुद्ध नहीं करना चाहते हैं, जबकि आप वहां से शुरू होने पर क्लिक करते हैं। चुपचाप विफल होना बेहतर है। यहां तक ​​कि एक पुष्टिकरण संदेश भी मार डाला जाएगा। हालाँकि, ईमेल विलोपन के साथ आपका उदाहरण मैं ब्लॉक-टाइप अजाक्स अनुरोध के लिए अनिवार्य होगा।

Mongo DB ऐसा कुछ करता है (और इसे डेस्कटॉप एप्लिकेशन उदाहरण माना जा सकता है)। उनके पास उनके कार्यों के लिए विभिन्न "राइट कंसर्न" हैं, और आप इसे प्रत्येक ऑपरेशन के लिए अलग-अलग मानों में कॉन्फ़िगर कर सकते हैं, जिसमें से "तुरंत वापस लौटें और किसी भी चीज़ का इंतजार न करें" तब तक "ब्लॉक करें" जब तक कि आप सफल नेटवर्क ट्रांसफर की पुष्टि न कर लें और उसके बाद "वापसी" तब तक करें जब तक कि सामग्री आपके डिस्क से पहले रिमोट मशीन पर डिस्क लिखने के लिए ठीक से निर्धारित न हो जाए। जाहिर है, अगर आप Mongo ड्राइवर का उपयोग करके डेस्कटॉप को मोटा ग्राहक बनाते हैं (C ++ की तरह), तो आप न्यूनतम "क्रिटैलिटी" (जैसे नए ईमेल की जाँच करना) के db संचालन के लिए सबसे हल्का लेखन चिंता निर्धारित करेंगे, और दूसरों को और अधिक सख्त लेखन चिंताओं पर ।

जबकि मैं अजाक्स को अवरुद्ध नहीं करने की उपयोगिता देखता हूं, मैं आपसे सहमत हूं कि यह बहुत ज्यादा हो रहा है। एक बिंदु पर कम से कम एक प्रसिद्ध "सोशल नेटवर्किंग" साइट थी जो फोटो अपलोड करने के लिए ऐसा करेगी। आपने अपनी फ़ोटो को अपलोड करने के लिए चुना है और फिर bam, तुरंत यह आपको बता देगा कि यह पूरा हो गया है, और फिर अगले दिन पर्याप्त है जब आप कुछ और फ़ोटो जोड़ना चाहते थे (या उस पर उपयोग करना चाहते थे जो आपने पहले ही जोड़ा था), यह कभी नहीं मिला था। बाद में उन्होंने इस पर छोड़ दिया, और वास्तव में प्रतिक्रिया की प्रतीक्षा करने के लिए समय लिया (और आपको वास्तव में कभी-कभी "फोटो अपलोड करने में विफल, बाद में प्रयास करें" जैसे संदेश मिलेंगे।


चीजों को देखने के लिए +1 :)। फोटो अपलोड इसका असफल उदाहरण है।
रिएक्टगुलर

1
एक अवरुद्ध अपलोड बेहतर क्यों होगा? पिकासा (वेब ​​इंटरफ़ेस) में, आप फ़ोटो को खींच सकते हैं, और जब वे पृष्ठभूमि में अपलोड करते हैं, तो आप अधिक फ़ोटो खींच सकते हैं, या टैग समाप्त कर सकते हैं, आदि। एक अवरुद्ध अपलोड ऑपरेशन ऐसा बना देगा कि भयानक UX
BLSully
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.