2011-08-13 2 views
6

मैं jQuery और अजाक्स का उपयोग एक गतिशील वेबसाइट का निर्माण कर रहा हूँ में पैरामीटर जैसे कई हैश पासिंग। मैं इतिहास और वापस बटन की समस्या को हल कर दिया है इतिहास प्लगइन का उपयोग कर। मैं क्लिक इवेंट पर पूरे पेज को पुनः लोड किए बिना यूआरएल में पैरामीटर की तरह कई हैश पास करना चाहता हूं। मैं कुछ की तरह हैं:यूआरएल

  • something.php#type=abc&id=123 या
  • something.php/?type=abc&id=123 ...

कौन सा सबसे अच्छा तरीका है गुजरती हैं और इस तरह थोड़े URL में पैरामीटर को पुनः प्राप्त करने हो सकता है?

<a href="#type=abc&id=123">Click</a> 
if(type==abc && id==123) 
{ 
    do this.. 
} 

आम तौर पर हम इस, <a href="something.php?type=abc&id=123">Click</a> है, लेकिन यह पूरे पृष्ठ को पुनः लोड।

उत्तर

9

हैश मान अक्षर है कि तकनीकी रूप से उस में रहने की अनुमति है की एक सीमित सेट है। यदि आप यहां URL spec देखते हैं, तो हैश मान को खंडित कहा जाता है। यहाँ यह क्या हो सकते हैं के लिए व्याकरण है:

 
fragmentid    xalphas 
xalphas     xalpha [ xalphas ] 
xalpha     alpha | digit | safe | extra | escape 
safe     $ | - | _ | @ | . | & | + | - 
extra     ! | * | " | ' | (|) | , 
escape     % hex hex 
alpha     a | b | c | d | e | f | g | h | i | j | k | 
         l | m | n | o | p | q | r | s | t | u | v | 
         w | x | y | z | A | B | C | D | E | F | G | 
         H | I | J | K | L | M | N | O | P | Q | R | 
         S | T | U | V | W | X | Y | Z 
digit     0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 

आप देखेंगे आप & हो सकता है, लेकिन नहीं = जब तक आप हैश मान पर encodeURIComponent और decodeURIComponent फोन जब यह स्थापित करने या इसे पुन: प्राप्त करने। क्या तकनीक के लिए

के रूप में उपयोग करने के लिए, यह वास्तव में आप पर निर्भर है। यदि आपको वहां कई पैरामीटर का प्रतिनिधित्व करने की आवश्यकता है तो आप हैश मान में अपना स्वयं का छोटा वाक्यविन्यास बना सकते हैं। मैं व्यक्तिगत रूप से शायद सिर्फ क्वेरी स्ट्रिंग में तरह & साथ मानों को अलग, लेकिन - बजाय = का प्रयोग करेंगे।

+0

हाँ हमारा अपना वाक्यविन्यास बनाना समाधान हो सकता है लेकिन यह अच्छा ऑफिसियल नहीं दिखता है। मैं इतिहास प्लगइन का उपयोग कर इस तरह की चीजों का उपयोग कर रहा हूँ। queness.com/resources/html/ajax/simple.php#page1 अब मुझे simple.php # पृष्ठ = पृष्ठ 1 और कुछ = कुछ चाहिए ... PLZ सहायता मित्र – roy

+1

कृपया मेरा उत्तर देखें। क्या @roy प्रस्तावित करता है यूआरएल खंडित का पूरी तरह से वैध उपयोग है और उसे '-'' '' के साथ प्रतिस्थापित करने की आवश्यकता नहीं है। वास्तव में, ऐसा करने से यह कम अर्थपूर्ण होगा। – jangosteve

3

यूआरआई के संदर्भ में, आप वास्तव में आप क्या कह रहे हैं कर सकते हैं।

@ jfriend00 सही है कि आप किसी दिए गए हैश मान के नाम/मूल्य में "=" का उपयोग नहीं कर सकते हैं, हालांकि, मुझे लगता है कि उन्होंने वास्तव में इसका अर्थ क्या है इसका अनुमान लगाया है। आप URL के क्वेरी स्ट्रिंग में नाम/मान में "=" वर्ण का भी उपयोग नहीं कर सकते हैं। क्यूं कर? क्योंकि इसमें कुंजी/मूल्य जोड़ी को इंगित करने में विशेष अर्थ है। यह हैश (उर्फ खंडित) में एक ही उद्देश्य की सेवा करता है, जो वास्तव में आप अपने उदाहरण में इसका उपयोग कैसे कर रहे हैं।

आप w3.org page for media fragments को देखें, तो तीसरे वाक्य में कहा गया है:

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

ध्यान दें कि यह कहता है कि आप दोनों क्वेरी और यूआरआई के हैश भाग के लिए कुंजी/मूल्य जोड़े का उपयोग कर सकते हैं।

नाम-मान युग्म की एक सूची यूआरआई की क्वेरी या टुकड़ा घटक में एन्कोड किया गया है: आप further down in the page देखो, तो आप यह है कि यह प्रारूप आप fragmentid में यह प्रयोग कर रहे हैं बिल्कुल के रूप में वर्णन करता मिल जाएगा। नाम और मूल्य घटकों को बराबर चिह्न (=) से अलग किया जाता है, जबकि एकाधिक नाम-मान जोड़े को एम्पर्सेंड() से अलग किया जाता है।

कहा जा रहा है कि जावास्क्रिप्ट में संरचित तरीके से कुंजी/मूल्य जोड़े तक पहुंचने का एक अंतर्निहित तरीका नहीं है (जैसे कि इसमें कुंजी/मूल्य जोड़े तक पहुंचने का एक अंतर्निहित तरीका नहीं है क्वेरी स्ट्रिंग का)। तो, आप अपने खुद के समारोह के निर्माण के लिए है कि क्या करना है चाहते हैं, और वहाँ पहले से ही कैसे करना है पता चलता है कि StackOverflow पर कुछ अन्य पदों हैं कि:

+0

यह एक टिप्पणी होनी चाहिए, यह उत्तर केवल अन्य जवाब गलत साबित करता है, यह वास्तव में प्रश्न का उत्तर नहीं देता है। –

+3

@ हनोनिक्स यह एक टिप्पणी नहीं हो सकती है, क्योंकि टिप्पणियों की सीमित वर्ण सीमा होती है। इसके अलावा, यह सवाल का जवाब देता है, जो था: "यूआरएल में ऐसे तरह के पैरामीटर को पारित करने और पुनर्प्राप्त करने का सबसे अच्छा तरीका कौन सा हो सकता है? 'Click' "। मेरा जवाब सचमुच कह रहा है, हां, आप क्वेरी स्ट्रिंग यूआरएल का उपयोग करने के बजाय, लिंक के href के रूप में टुकड़े का उपयोग करके प्रस्तावित वही कर सकते हैं, और इस प्रकार यूआरएल में क्वेरी स्ट्रिंग को बदलने के रूप में पृष्ठ को फिर से लोड नहीं किया जा सकता है। – jangosteve