2012-12-12 23 views
5

पर क्लिक करने के बाद फ़ॉर्म फ़ील्ड को दोबारा शुरू करने से रोकें मेरे पास एक फॉर्म है। सफलतापूर्वक सबमिट करने के बाद, नई प्रविष्टि देखने के लिए एक सर्वर साइड रीडायरेक्ट होता है।बैक बटन

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

फॉर्म में 20+ फ़ील्ड हैं, और तकनीकी रूप से यह संभव बोल रहा है कि दो समान प्रविष्टियां वैध हो सकती हैं, लेकिन मैं बस बैक बटन दबाते समय फ़ील्ड को साफ़ करना चाहता हूं।

यहाँ मैं क्या कोशिश की है:

कोई कैश हेडर कोई कैश की
header('Cache-Control: must-revalidate, no-store, no-cache, private, max-age=0'); 
header('Pragma: no-cache'); 
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 
युग्म मेटा टैग
<meta http-equiv="cache-control" content="max-age=0" /> 
<meta http-equiv="cache-control" content="no-cache" /> 
<meta http-equiv="expires" content="0" /> 
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" /> 
<meta http-equiv="pragma" content="no-cache" /> 
सबमिट करना और जावास्क्रिप्ट के साथ पुनः निर्देशित
$('form').submit(function(){ 
    $.post($(this).attr('action'), $(this).serialize(), function(response){ 
     window.location = response.redirectUrl; 
    }); 
}); 
"ताज़ा" फ़ॉर्म
header('refresh:0; url=view_entry'); 
ताज़ा सत्र डेटा से शुरू हो रहा जमा करने के बाद पुन: निर्देशित (यहाँ एक छोटे से hacky हो रही ...) इस बात का
// psuedo PHP code for the "add" page 
if ($_SESSION['submit']) { 
    $_SESSION['submit'] = 0; 
    redirect(current_url); // Cross fingers and hope this clears the form 
} 
if ($formValid and $saveEntry) { 
    $_SESSION['submit'] = 1; 
    redirect(next_url); 
} 

कोई भी काम करता है, खेतों अभी भी मारने के बाद भर जाती है बैक बटन आखिरी विकल्प वास्तव में "फॉर्म फॉर्म सबमिशन" प्रॉम्प्ट को ट्रिगर करता है, जो कि मैं नहीं चाहता लेकिन कम से कम यह थोड़ा बेहतर है।

मुझे यह उल्लेख करना चाहिए कि यह Google क्रोम में है। कोडिनेटर और jQuery उपलब्ध हैं अगर यह मदद करता है। एक सफल प्रविष्टि पोस्ट होने के बाद, उपयोगकर्ता बैक बटन हिट करने के बाद फॉर्म फ़ील्ड को साफ़ करना चाहता हूं। मुझे वास्तव में इस मुद्दे को पहले याद नहीं है, और मैं सभी विचारों से बाहर हूं। ऐसा करने का सही तरीका क्या है?

+0

FWIW मैं Codeigniter के CSRF सुरक्षा को सक्षम करने की कोशिश की है, लेकिन अस्थायी रूप से किसी भी तरह वापस बटन पर पुनर्जीवित हो जाता है, तो यह मदद नहीं करता है ... –

+1

मलामत तत्काल अनाज में ब्राउज़र एक CSRF टोकन लेकिन स्पष्ट नहीं प्रपत्र मूल्यों को पुनर्जीवित करता है कैसे ?! – stormdrain

+0

या * पोस्ट * रीडायरेक्ट के बाद ब्राउज़र फ़ील्ड मानों को क्यों बनाए रखता है? –

उत्तर

2

प्रतिक्रिया के बाद और रीडायरेक्ट से पहले व्यक्तिगत रूप से फ़ील्ड को साफ़ करने के लिए एक तेज़ और आसान तरीका होगा।

$('form').submit(function(){ 
    $.post($(this).attr('action'), $(this).serialize(), function(response){ 
     // HERE, clear the fields like... 
     $("#field_id_1").val(''); 
     $("#field_id_2").val(''); 
     // THEN do the redirect 
     window.location = response.redirectUrl; 
    }); 
}); 

यह सबसे व्यापक समाधान नहीं हो सकता है, लेकिन जब से तुम एक ajax कॉल का उपयोग कर अपने प्रस्तुत कर रहे हैं वैसे भी, वहाँ यह इस तरह से नहीं करने के लिए कोई कारण नहीं है।

+0

मैंने अभी पढ़ा है कि फ़ॉर्म में 20+ प्रविष्टियां हैं। 'GetElementsByName' जैसी कुछ चीज़ों का उपयोग करना वांछनीय हो सकता है या फिर अलग-अलग खाली करने के बजाए उनके माध्यम से लूप कुछ ऐसा हो सकता है। यद्यपि वही कार्यप्रणाली। – NappingRabbit

+0

मैं एक और ठोस समाधान की उम्मीद कर रहा था लेकिन मैं इसे आजमाउंगा। AJAX के माध्यम से सबमिट करना पहले से ही एक हैक का एक छोटा सा था। –

+0

वास्तव में यह काम करता है, इसलिए आपके पास मेरा अपवर्त है, लेकिन मुझे यकीन नहीं है कि मैं इस समाधान का उपयोग करना चाहता हूं। –

संबंधित मुद्दे