2008-10-08 6 views
9

काम नहीं करता है मेरा मुखपृष्ठ मुझे मिल गया पर:AJAX के माध्यम से किसी पृष्ठ को पुन: लोड जब विंडो स्थान = self.location

<ul id="login"> 
    <li> <a id="loginswitch" href="./login-page">log-in</a> | </li> 
    <li> <a id="signupswitch" href="./signup-page">sign-up</a> </li> 
</ul> 

वाया MooTools, मैं आईडी द्वारा इन लंगर तत्वों मिल इतना है कि एक बार वे पर क्लिक हो , एक चमकदार div उन लोगों के नीचे पॉपअप करेगा जिनमें लॉगिन या साइनअप फॉर्म शामिल है (पाठ्यक्रम की घटनाओं के प्रसार को रोकने के तरीकों के साथ) और फ़ील्ड भरने पर AJAX कॉल में शामिल होता है - यह एक सत्र बनाना और पुनः लोड करना है पृष्ठ ताकि उपयोगकर्ता के पास एक दृश्य होगा कि वह अब लॉग इन है और उपयोगकर्ता-स्तर-नियंत्रण प्रकट होता है आदि ..

AJAX कॉल initia है MooTools AJAX क्लास द्वारा ted और evalScripts विकल्प सत्य पर सेट है। AJAX पृष्ठ स्क्रिप्ट कोड प्रस्तुत करती है:

<script type="text/javascript">window.location = self.location;</script> 

इस प्रणाली पूरी तरह से काम करता है - अब मैं क्यों अगर मैं href="#" को एंकर 'href मूल्यों को बदल मेरी स्क्रिप्ट अब काम नहीं करेगा सोच रहा हूँ?

क्या इसमें खिड़की से कुछ लेना देना है?

क्या मैंने अपनी संपत्ति को बदल दिया जब मैंने लिंक पर क्लिक किया था या फिर जब घटना का प्रचार बंद कर दिया गया था ??

उत्तर

20
window.location = self.location; 

यह जावास्क्रिप्ट को क्रियान्वित कर रहा है।

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

ब्राउज़र कैश

ब्राउज़र भी कैश में अपने वर्तमान पृष्ठ की एक प्रति है। यह सर्वर से बात कर सकता है और पूछ सकता है कि उसके पास कैश में मौजूद पृष्ठ अभी भी वैध है या नहीं। यदि कैश वैध है, तो यह निर्णय ले सकता है कि पृष्ठ को पुनः लोड न करें। दृश्यों के पीछे, यह HTTP शीर्षलेखों के साथ होता है। ब्राउज़र और सर्वर HTTP पर कई तरीकों से संवाद कर सकते हैं।

GET /stackoverflow.com/posts/196643/index.html 
HTTP/1.1 
Host: www.stackoverflow.com 
User-Agent: Mozilla/5.0 
If-Modified-Since: Sun, 12 Oct 2008 20:41:31 GMT 

यह एक सशर्त GET अनुरोध कहा जाता है: इस मामले में, आपके ब्राउज़र कुछ इस तरह सर्वर कह के लिए एक त्वरित अनुरोध भेजता है। कहकर संशोधित- के बाद से, आपका ब्राउज़र कह रहा है, "मुझे वह फ़ाइल दो, लेकिन केवल तभी जब इसे मैंने देखा था तब से संशोधित किया गया है।"

लंबी कहानी छोटी, आपने पृष्ठ को पुनः लोड करने के लिए ब्राउज़र को स्पष्ट रूप से नहीं बताया है।

location.reload(true); 

"सही" एक वैकल्पिक पैरामीटर, एक रीलोड मजबूर कर लिए है:

यहाँ कैसे आप कर सकते हैं है। ब्राउजर कैश को भी नहीं देखेगा .. यह वही होगा जैसा आप कहते हैं।

+0

वाह एक जेएस गुरु, इसके लिए बहुत बहुत धन्यवाद, मैं आपको एक डोनट और कुछ कॉफी दे रहा हूं :) – lock

+0

क्या होगा यदि आप एक पोस्ट चर सेट करना चाहते हैं और इसके बाद, रीफ्रेश करने के लिए? मैं दूसरे शब्दों को एक पोस्ट वैरिएबल संशोधित के साथ पुनः लोडिंग को पूरा करने के लिए कैसे? धन्यवाद – artaxerxe

1

किसी पृष्ठ पर एक एंकर पर जा रहा है - जो # दर्शाता है - एक रीलोड की आवश्यकता नहीं है।

0

अगर उन्होंने मुझे यह विशेष कार्य काम पर सौंप दिया तो मैं इसे वापस डिजाइन करने के लिए लात मारूंगा। जब तक हम किसी सुरक्षित पृष्ठ या ओपनआईडी लॉगिन के बारे में बात नहीं कर रहे हैं, तो आपको लॉग-इन या साइन-इन फॉर्म पॉप अप नहीं करना चाहिए। उपयोगकर्ताओं को उस https को देखने के लिए सीखना होगा: उनके पृष्ठ के शीर्ष पर, और यदि वे इसे नहीं देखते हैं तो कभी साइन इन नहीं करें।

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