मैं क्लाइंट साइड (जावास्क्रिप्ट) पर जानता हूं आप windows.location.hash का उपयोग कर सकते हैं, लेकिन सर्वर साइड से एक्सेस करने के लिए वैसे भी नहीं मिल सका।
मैं क्लाइंट साइड (जावास्क्रिप्ट) पर जानता हूं आप windows.location.hash का उपयोग कर सकते हैं, लेकिन सर्वर साइड से एक्सेस करने के लिए वैसे भी नहीं मिल सका।
जवाबों:
हमारे पास ऐसी स्थिति थी जहां हमें ASP.Net पोस्ट बैक में URL हैश को बनाए रखने की आवश्यकता थी। चूंकि ब्राउज़र डिफ़ॉल्ट रूप से सर्वर को हैश नहीं भेजता है, ऐसा करने का एकमात्र तरीका कुछ जावास्क्रिप्ट का उपयोग करना है:
जब फ़ॉर्म सबमिट हो जाता है, तो हैश को पकड़ो ( window.location.hash
) और इसे सर्वर-साइड छिपे हुए इनपुट फ़ील्ड में संग्रहीत करें "DIV में" urlhash
" की एक आईडी के साथ रखें " ताकि हम इसे बाद में आसानी से पा सकें।
सर्वर पर आप इस मान का उपयोग कर सकते हैं यदि आपको इसके साथ कुछ करने की आवश्यकता है। जरूरत पड़ने पर आप इसे बदल भी सकते हैं।
क्लाइंट पर पृष्ठ लोड होने पर , इस छिपे हुए फ़ील्ड के मूल्य की जांच करें। आप इसे उस DIV द्वारा खोजना चाहेंगे जो इसमें निहित है क्योंकि स्वतः-जनरेट की गई आईडी ज्ञात नहीं होगी। हां, आप यहां कुछ चालबाजी कर सकते हैं।
यदि छिपे हुए इनपुट फ़ील्ड का एक वैध मान है, तो निर्धारित करें कि URL हैश ( window.location.hash again
) और / या अन्य क्रियाएं करें।
हमने फील्ड के चयन को आसान बनाने के लिए jQuery का उपयोग किया, आदि ... सब में यह समाप्त होता है कुछ jQuery कॉल, एक मान बचाने के लिए, और दूसरा इसे पुनर्स्थापित करने के लिए।
सबमिट करने से पहले:
$("form").submit(function() {
$("input", "#urlhash").val(window.location.hash);
});
पृष्ठ लोड पर:
var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
window.location.hash = hashVal;
}
IsHashValid()
" undefined
" या अन्य चीजों के लिए जांच कर सकते हैं जिन्हें आप संभालना नहीं चाहते हैं।
इसके अलावा, सुनिश्चित करें कि आप $(document).ready()
उचित रूप से उपयोग करते हैं , निश्चित रूप से।
RFC 2396 खंड 4.1:
जब एक यूआरआई संदर्भ का उपयोग पहचान किए गए संसाधन पर पुनर्प्राप्ति कार्रवाई करने के लिए किया जाता है, तो एक क्रॉसहैच ("#") चरित्र द्वारा यूआरआई से अलग किए गए वैकल्पिक खंड पहचानकर्ता में पुनर्प्राप्ति के बाद उपयोगकर्ता एजेंट द्वारा व्याख्या किए जाने वाले अतिरिक्त संदर्भ जानकारी शामिल होती है। कार्रवाई सफलतापूर्वक पूरी कर ली गई है । जैसे, यह एक यूआरआई का हिस्सा नहीं है, लेकिन अक्सर एक यूआरआई के साथ संयोजन में उपयोग किया जाता है।
(महत्व दिया)
ऐसा इसलिए है क्योंकि ब्राउज़र उस हिस्से को सर्वर तक नहीं पहुंचाता है, क्षमा करें।
संभवतः एकमात्र विकल्प क्लाइंट पक्ष पर इसे पढ़ना है और इसे मैन्युअल रूप से सर्वर (GET / POST / AJAX) में स्थानांतरित करना है। सादर अरत
आप यह भी देख सकते हैं कि मालकान में बैक बटन और ब्राउज़र इतिहास के साथ कैसे खेलें
बस उस संभावना से इंकार करने के लिए जिसे आप वास्तव में एक GET / POST पर टुकड़े को देखने की कोशिश नहीं कर रहे हैं और वास्तव में जानना चाहते हैं कि आपके सर्वर-साइड कोड में URI ऑब्जेक्ट के उस हिस्से तक कैसे पहुंचें, यह Uri.Fragment के तहत है। ( MSDN डॉक्स )।
GET अनुरोधों के लिए संभावित समाधान:
नया लिंक प्रारूप: http://example.com/yourDirectory?hash=video01
इस फ़ंक्शन को नियंत्रक के शीर्ष पर कॉल करें या http://example.com/yourDirectory/index.php
:
function redirect()
{
if (!empty($_GET['hash'])) {
/** Sanitize & Validate $_GET['hash']
If valid return string
If invalid: return empty or false
******************************************************/
$validHash = sanitizeAndValidateHashFunction($_GET['hash']);
if (!empty($validHash)) {
$url = './#' . $validHash;
} else {
$url = '/your404page.php';
}
header("Location: $url");
}
}