2013-01-22 23 views
5

मेरे पास एक पृष्ठ है जिसमें सामग्री पोस्ट की गई है। जब मैं या तो Cmd + R का उपयोग कर या ब्राउज़र ताज़ा करें बटन का उपयोग करके सफारी में कहा पेज को ताज़ा, एक पॉप अप नीचे की तरह दिखाई देता है: enter image description hereपृष्ठ सफारी में पृष्ठ पुनः लोड करें

यह व्यवहार भी अन्य ब्राउज़रों (क्रोम, एफएफ आदि) में एक जैसा है ।

लेकिन जब मैं या तो window.location.href = location.href या location.reload() या window.location.reload (का उपयोग करके जावास्क्रिप्ट का उपयोग करते हुए एक ही पृष्ठ ताज़ा करने का प्रयास) या यहाँ तक कि सफारी में window.location.reload (true), यह उपर्युक्त पॉप-अप नहीं दिखाता है। लेकिन यह व्यवहार क्रोम, एफएफ आदि में अलग है जहां एक ही पॉप-अप दिखाई देता है।

संपादित करें: पॉप-अप प्रदर्शित नहीं होने का परिणाम यह है कि पोस्ट की गई सामग्री नाराज नहीं होती है और इस प्रकार व्यवहार में परिवर्तन होता है।

तो मेरा सवाल अब है कि मैं सभी ब्राउज़रों में पृष्ठ को फिर से लोड कैसे करूं ताकि पोस्ट की गई सामग्री को फिर से भेजा जा सके।

+0

सुनिश्चित नहीं हैं कि आप ब्राउज़र के व्यवहार को बदलने में सक्षम हो जाएगा पर पुष्टि के बिना ताज़ा कर सकते हैं, लेकिन आप यदि संभव हो तो पोस्ट करने के बजाय का उपयोग कर, पर विचार किया है? – sachleen

+0

मेरे पास है, बात यह है कि मैं एक JSON सामग्री पोस्ट कर रहा हूं। जीईटी का उपयोग करते समय यह बदसूरत लगेगा। –

उत्तर

1

AJAX

के माध्यम से

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

तो तुम मिलेगा क्या है:

पोस्ट document.ext

#In whatever server side language you're using, the reason this can't be done 
# purely in javascript is that POST data is only available to the server. 
print "<script>" 
print "POSTdata = " + JSONEscape(POSTdata) + ";" 
print "var doAction = function(){" 
print " ajax('action.ext', POSTdata, function(result){});" 
print "});" 
print "</script>" 
print "<button onclick='doAction()'>Refresh</button>" 

पोस्ट action.ext

# all the logic you previously had in document.xxx 

इसी का परिणाम है:

  • सभी ब्राउज़रों में एक उपयोगकर्ता ने रीफ्रेश शुरू किया POST डेटा भेज देगा और तर्क फिर से ट्रिगर किया जाएगा।
  • ताज़ा करें बटन पूरे पृष्ठ को फिर से लोड किए बिना सीधे आपके तर्क को फिर से ट्रिगर करेगा।

स्व प्रस्तुत करने प्रपत्र

यह सिर्फ मुझे मारा है कि एक और - आसान लागू करने के लिए - प्राप्त करने के लिए इस बस एक <form action='?' method='POST'> और कोड ट्रिगर में यह submit समारोह बनाने के लिए है जिस तरह से। आपको अभी भी printPOSTdata की आवश्यकता होगी, लेकिन अजाक्स कॉल को ट्रिगर करने के बजाय, आप छिपे हुए <form> के माध्यम से उसी पृष्ठ पर रीडायरेक्ट को ट्रिगर करेंगे। इसका लाभ यह है कि इसे किसी भी पुनर्गठन की आवश्यकता नहीं है, हालांकि मुझे व्यक्तिगत रूप से लगता है कि AJAX विधि साफ दिखती है। एक त्वरित Google-fu ने these answers को प्रस्तुति का विवरण दिया।

+0

यह 'POST' पृष्ठ अनुरोध के जेएस-आधारित रीफ्रेश की तरह प्रतीत होता है ऐसा करने योग्य नहीं है। Pesky क्रॉस ब्राउज़र संगतता मुद्दों! – andrewb

0

यदि आप वास्तव में बिना पुष्टि के पृष्ठ को रीफ्रेश करना चाहते हैं, तो आपको रीडायरेक्ट का उपयोग करना चाहिए।तो आप पृष्ठ ए पर डेटा पोस्ट करते हैं, और पोस्ट या जानकारी को सत्र या कुकी पर सहेजते हैं, और उसके बाद पृष्ठ बी को प्रस्तुत करने के लिए रीडायरेक्ट करते हैं।

या आप पेज ए पर अपने व्यवसाय तर्क के लिए सबकुछ कर सकते हैं, और पृष्ठ बी का उपयोग केवल धन्यवाद पृष्ठ के रूप में कर सकते हैं।

उसके बाद, आप पेज बी

+0

प्रश्न पुष्टिकरण नहीं दिखा रहा था, यह सफारी में जेएस-आधारित रीफ्रेश का एक ही पूर्ण व्यवहार प्राप्त करने के बारे में था जैसा कि आप अन्य ब्राउज़रों के साथ करते हैं। प्रश्न के माध्यम से एक और पढ़ें। – andrewb

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