2012-03-16 15 views
8

मैं एक वेबपृष्ठ पर Google फॉर्म का उपयोग कर रहा हूं। मैंने सीधे स्रोत से स्रोत कोड की प्रतिलिपि बनाई है ताकि मैं आईफ्रेम का उपयोग करने के बजाय कुछ HTML को संशोधित कर सकूं। फिर उपयोगकर्ता को Google डॉक्स प्रतिक्रिया पृष्ठ पर ले जाने के बजाय मैं उन्हें किसी अन्य पृष्ठ पर रीडायरेक्ट करना चाहता हूं।पुराना Google फॉर्म सबमिट करें फिर किसी अन्य पृष्ठ पर रीडायरेक्ट करें

जो समस्या मैं चला रहा हूं वह पेज रीडायरेक्ट के साथ है। मैं इस इस के साथ क्रोम और फ़ायरफ़ॉक्स में ठीक से काम कर प्राप्त करने में सक्षम था:

<form target="GoogleResponse" action="https://docs.google.com/spreadsheet/ 
formResponse?formkey=xxxxxxxxxxxxxxxxxxxxxxxxxx&amp;ifq;" onsubmit=" 
window.location = 'targetPage.html';" method="POST" id="ss-form"> 

IE और सफारी दोनों स्वचालित रूप से पुन: निर्देशन किया था और प्रतिक्रिया कभी नहीं Google फ़ॉर्म को पत्र लिखा गया। अगर मैं रीडायरेक्ट छोड़ देता हूं, तो कार्रवाई दोनों में पूरी तरह से काम करती है और प्रतिक्रिया Google स्प्रेडशीट में दर्ज की जाती है।

तो मैं कार्रवाई बाहर खींच करने का प्रयास किया और इसके बजाय यह ऑनसबमिट में सब कुछ करने के बजाय, इसलिए पसंद आया:

<form target="GoogleResponse" onsubmit="this.action = https://docs.google.com 
/spreadsheet/formResponse?formkey=xxxxxxxxxxxxxxxxxxxxxxxxxx&amp;ifq'; 
window.location = 'targetPage.html';" method="POST" id="ss-form"> 

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

तो इस बिंदु पर केवल एक चीज जिसे मैं समझ सकता हूं वह यह है कि यह रीडायरेक्ट और कार्रवाई के बीच कुछ प्रकार का संघर्ष है। मेरे पास जावास्क्रिप्ट और रूपों का बहुत सीमित काम ज्ञान है इसलिए किसी भी मदद या सिफारिशों की सराहना की जाएगी!

उत्तर

0

लगता है कि ब्राउज़र ने रीडायरेक्ट को संभालने से पहले फॉर्म सबमिशन पूरा नहीं किया है। सबमिशन जमा करने से पहले होता है ताकि आप वहां इस मुद्दे को संभाल नहीं सकें।

रीडायरेक्ट के लिए लक्ष्य iframe के ऑनलोड फ़ंक्शन का उपयोग करें।

यह समान तरीके से कहा गया है:

Old Google Form redirect after submission

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


विस्तारित टिप्पणी: आप एक setTimeout सुविधा के भीतर पुन: निर्देशन डालने की कोशिश कर सकते। यह रीडायरेक्ट के निष्पादन में देरी करेगा, सर्वर को सबमिशन को पहले संभालने की इजाजत देता है। लेकिन सेटटाइमआउट को निश्चित समय की आवश्यकता होती है, इसलिए यदि डेटा हैंडलिंग सिंक्रोनस नहीं है (यानी एसिंक्रोनस) सेटटाइमआउट काम नहीं करेगा क्योंकि यह जल्दी या बहुत देर हो सकती है। असीमित डेटा हैंडलिंग तब लागू होती है जब डेटा प्रोसेसिंग की अनिश्चित अवधि (जैसे http अनुरोध) की आवश्यकता होती है।

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

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