2012-11-30 62 views
5

मुझे वर्तमान में HTTP पोस्ट फॉर्म और इतिहास पुशस्टेट के साथ एक छोटी सी समस्या का सामना करना पड़ रहा है।history.pushstate और HTTP POST फॉर्म repost

जब मेरा उपयोगकर्ता example.com/page-1 में पोस्ट फॉर्म सबमिट करता है और फिर इस पृष्ठ के भीतर एक लिंक पर क्लिक करता है, तो उसे इतिहास.pushstate के साथ example.com/page-2 पर रीडायरेक्ट किया जाता है। जेएस स्क्रिप्ट सिर्फ वर्तमान यूआरएल को बदलती है, पुराने को इतिहास में धक्का देती है, और फिर नई सामग्री प्रदर्शित करती है। यह मेरे लिए बिल्कुल ठीक काम करता है।

समस्या: एक बार उपयोगकर्ता example.com/page-2 पर है और मैन्युअल पेज (Ctrl + R या ताज़ा बटन) ताज़ा करता है, Chromes फ़ॉर्म पुनः सबमिट करने उपयोगकर्ता को संकेत देता; लेकिन फॉर्म वास्तव में example.com/page-1 में था और इस "नए" पृष्ठ में फिर से पूछने का कोई कारण नहीं है।

ब्राउज़र से रिपोस्ट प्रॉम्प्ट को रोकने के लिए पॉपस्टेट परिवर्तन पर जावास्क्रिप्ट में पहले से सबमिट किए गए सभी डेटा को साफ़ करने का कोई तरीका है? या क्या मैं अपने इतिहास के राज्यों में कुछ खो रहा हूं? या क्या यह वर्तमान में ब्राउज़र द्वारा अभी तक लागू नहीं किया गया है?

मैंने केवल क्रोम के साथ इसका परीक्षण किया क्योंकि मैं अन्य ब्राउज़रों के साथ पुशस्टेट को लागू नहीं करता हूं।

उत्तर

1

शायद बदले में स्टेटस को आजमाएं? this देखें।

replaceState() विधि

history.replaceState() वास्तव में replaceState छोड़कर history.pushState()() की तरह संचालित एक नया बनाने के स्थान पर वर्तमान इतिहास प्रविष्टि को संशोधित करता है।

replaceState() विशेष रूप से उपयोगी होता है जब आप कुछ उपयोगकर्ता कार्रवाई के जवाब में वर्तमान स्थिति प्रविष्टि के राज्य ऑब्जेक्ट या यूआरएल को अपडेट करना चाहते हैं।

+0

हाय, मुझे प्रतिस्थापन के साथ एक ही समस्या मिली है, लेकिन अब मैं अजाक्स के माध्यम से अपने फॉर्म भेजता हूं जो समस्या हल करता है। मुझे लगता है कि AJAX के माध्यम से फ़ॉर्म भेजने के बिना जावास्क्रिप्ट इतिहास.pushstate और replacestate का उपयोग करना एक अच्छी बात नहीं है क्योंकि jquery, mootools आदि के साथ ऐसा करना बहुत आसान है। – pafounet

0

मेरे पास एक समान समस्या है - मैं BackboneJS के साथ इतिहास API का उपयोग कर रहा हूं।

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

अपने उदाहरण के लिए, example.com/page-1 में पोस्ट पर्चे को जमा करने के बाद सर्वर example.com/page-1a

example.com/page-1a करने के लिए उपयोगकर्ता अनुप्रेषित पुष्टि कर सकते हैं कि उपयोगकर्ता क्रेडेंशियल मौजूद हैं चाहिए, और फिर example.com/page-2 ले जाते हैं। यह आपकी समस्या का समाधान करेगा, मुझे विश्वास है।

पुनर्निर्देशन तंत्र के लिए, वहाँ 3 विकल्प है कि मैं के बारे में सोच सकते हैं:

  1. सर्वर साइड अनुप्रेषित
  2. जावास्क्रिप्ट (location.href="page-2")
  3. HTML शीर्षक (<meta http-equiv="refresh" content="0; URL='http://example.com/page-2'" />)

व्यक्तिगत रूप से मैंने विकल्प 1 और 2 की कोशिश की है - वे मेरे लिए ठीक काम करते हैं। उम्मीद है की यह मदद करेगा!