2011-08-19 3 views
12

हटाएं मैं एक वेब एप्लिकेशन बनाने में व्यस्त हूं, जिसके लिए बहुत सारे त्रुटियों और सामानों को संसाधित करने की आवश्यकता है, इसलिए मैंने एक jquery UI संवाद बॉक्स बनाया है। जो इन त्रुटियों को दिखाता है। डेटाबेस द्वारा त्रुटियों को पुनर्प्राप्त किया जाता है। उदाहरण के लिए:jQuery एक यूआरएल वैरिएबल

जब मेरे नाम/पासवर्ड गलत है जब मैं लॉग इन करने में मैं

http://domain.com/?do=login&e=login-incorrect 

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

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

मैं क्या करने की कोशिश की:

bassicly सभी संभव पैरामीटर हो रही है और ई पैरामीटर के अलावा एक साथ उन सिलाई की कोशिश की। इसलिए जैसे:

$ERROR = $_GET['e']; 
$DO = $_GET['do']; 
$P = $_GET['p']; 
$C = $_GET['c']; 
$T = $_GET['t']; 
$ACTION = $_GET['action']; 

// URL WITHOUT ERRORS 
$needP = ""; 
$needACTION = ""; 
$needDO = ""; 
if($P != ""){ 
    $needP = "p=".$P."&"; 
} 
if($DO != ""){ 
    $needDO = "do=".$DO."&"; 
} 
if($ACTION != ""){ 
    $needACTION = "action=".$ACTION.""; 
} 
$NOERRORURL = $BASEURL."?".$needP.$needDO.$needACTION; 

लेकिन यह काम नहीं करता है और उसके बदसूरत

+0

हमें दिखाती है कि आप क्या करने की कोशिश की। –

+0

संपादित पोस्ट ... – sn0ep

उत्तर

25
location.href=location.href.replace(/&?e=([^&]$|[^&]*)/i, ""); 

यह क्वेरी स्ट्रिंग से ई पैरामीटर के सभी उदाहरणों को हटा देगा और पृष्ठ को रीफ्रेश करेगा।

+0

ग्रेट धन्यवाद यह वही है जो मुझे चाहिए! आपका बहुत बहुत धन्यवाद! – sn0ep

+0

'example.com? ई = अंडे और एफ = मेंढक' -> example.com? और f = मेंढक'। '? &' थोड़ा सा झटका है। –

+0

'अगर (location.search.length) { location.href = location.href.substring (0, location.href.indexOf ('?')) + '?' + ('&' + Location.search.substring । (1)) की जगह (/ & ई = ([^ &] $ | [^ &] *)/मैं, '') सबस्ट्रिंग (1)। } ' –

3

एक तरह से यह करने के लिए:

location.search = location.search.replace(/&e=[^&;]*/,''); 

की तरह आप का उल्लेख है कि पृष्ठ पुनः लोड होगा 'ई' पैरामीटर के बिना


हालांकि, एक बेहतर दृष्टिकोण इस तरह के बजाय एक हैश का उपयोग करने के, यह है: http://domain.com/?do=login#login-incorrect। तो फिर तुम हैश पृष्ठ लोड होने के लिए जाँच कर सकते हैं, और अपने त्रुटि संवाद खोलते हैं login-incorrect हैश पाया जाता है:

if (location.hash.indexOf('login-incorrect') != -1) { 
    // Open your jQuery UI dialog here 
} 

और अगर वे संवाद बंद, तो आप बस पृष्ठ को ताज़ा करने के बिना हैश साफ कर सकते हैं :

$('.closeErrorDialog').click(function(){ 
    location.hash = ''; 
}); 

आप इनमें से एक बहुत कुछ है करने के लिए जा रहे हैं, तो मेरा सुझाव है बेन Alman के jQuery hashchange event या अधिक पूर्ण विशेषताओं BBQ plugin जो अपने जीवन बहुत आसान बनाने के लिए जब आप हैश के साथ काम कर रहे हैं।

+0

यह बहुत साफ काम करता है, लेकिन अगर उपयोगकर्ता को इंडेक्स पेज पर कोई त्रुटि मिलती है तो क्या होगा? तो निम्नलिखित यूआरएल पर। 'http: //domain.com/? e = login-error' उपयोगकर्ता लगातार उस त्रुटि के माध्यम से लुप्त हो जाएगा, भले ही वह – sn0ep

+0

संवाद बंद कर देता है लेकिन इस woukld का मतलब है कि मुझे मैन्युअल रूप से 20+ बनाना है। सही? – sn0ep

+1

@Toby: पृष्ठ कभी पुनः लोड नहीं किया गया है, इसलिए कोई लूप नहीं हो सकता है। और आपको इनमें से 20+ क्यों बनाना होगा? –

0
urlObject = new URL(url); 
urlObject.searchParams.delete('myParameter'); 

यूआरएल ऑब्जेक्ट में एक खोज पैराम विशेषता है जिसमें फ़ंक्शन हटा दिया गया है। यह urlObject से myParameter को हटा देगा। आप फिर से अपने यूआरएल का उपयोग करने के लिए, बस चाहते हैं:

url = urlObject.href; 

आगे:

https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/delete https://developer.mozilla.org/de/docs/Web/API/URL/searchParams