2012-11-05 13 views
5

Uderzam w akcję podpórek przy użyciu AJAX, wszystko jest w porządku, ale jest problem z przeglądarką Firefox, gdy przekazuję parametr w adresie URL jako parametr żądania i jeśli ten parametr zawiera symbol hash (#) na końcu, to Firefox usuwa wszystko za tym symbolem i wysyła ten parametr do działania bez niego.Przekazywanie symbolu haszowania "#" w żądaniu parametru adresu URL nie działa w przeglądarce Firefox

Na przykład, jeśli im przekazuję test123 # abcd w Firefoksie, to dostaję tylko test123 w klasie działania, w przeciwieństwie do test123 # abcd, co jest niepożądane dla mojego wymagania. Dla IE działa idealnie. Czy jest jakiś sposób przez które mogę wyodrębnić pełny parametr zawierający symbol # w Firefoksie.

proszę dać mi znać, jeśli muszę wysłać kod akcji java również, dzięki.

JS snippet

var valuePassword=test123#abcd; 

    var url = "/test/ChangePwdAjax.do?newPass="+valuePassword; 
      var xmlHTTP = getXMLHTTPRequest(); 

Odpowiedz

10

Zastosowanie

var url = "/test/ChangePwdAjax.do?newPass="+ encodeURIComponent(valuePassword); 

To będzie zakodować valuePassword do ważnego składnika URL, które mogą być przekazywane jako ciąg kwerendy w URL

a po drugiej stronie powinieneś użyć decodeURIComponent, aby uzyskać wartość z zakodowanego ciągu

var value = decodeURIComponent(valuePasswordPassed); 

Aby dowiedzieć się więcej na temat tego Go here

+1

Powodem jest to, że musisz kodować swoje dane. Hash (#) jest tutaj niepoprawny, hash i wszystko, co następuje, nigdy nie powinno opuszczać przeglądarki. – Onkelborg

+1

Osobiście chciałbym umieścić link do [tej dokumentacji] (https://developer.mozilla.org/en-US/ docs/JavaScript/Reference/Global_Objects/encodeURIComponent) zamiast w3schools (które mają tendencję do tworzenia dokumentacji podparcia). –

+0

Dziękuję wszystkim, działa, wcześniej byłem ograniczony przez mój proces myślowy, ponieważ w IE działało dobrze. Zastanawiałem się również, dlaczego obie przeglądarki zachowują się inaczej, zgadzam się, że ciąg kwerendy URL musi być zakodowany. Dzięki – user1697113

1

przypadku zmiany danych, które muszą wykonać żądania HTTP POST. Nie jest to żądanie GET. Spowoduje to automatyczne rozwiązanie problemu bez konieczności kodowania hasła.

xmlhttp.open("POST", "/test/ChangePwdAjax.do", true); 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlhttp.send("newPass=" + valuePassword); 
+0

Próbowałem, zmieniając xmlHTTP.open ("GET", url, true); do xmlHTTP.open ("POST", adres URL, prawda); ale to samo.nie wiem, czy robię to poprawnie.Ale kodowanie rozwiązało mój cel. Dzięki. – user1697113

+0

@ user1697113 Wartości nie powinny znajdować się w adresie URL, ale w treści. Zaktualizuję moją odpowiedź. – ZippyV

Powiązane problemy