10

Right now redirection is made simply by saying

window.location = "/relative_path/";

What I want to do is to add a query parameter along with this redirection, so the destination page can look at that, and after some action was taken it could redirect further to that page.

Example for that use is a login system. When the user's token expires, he is redirected to the login page. At the time of the redirection I want to pass along the exact URL (including query parameters in the URL) to the login page, so after a successful login the user could be redirected back exactly to the point where he/she was.

I tried to pass the path as a URL parameter, but that doesn't work because of escaping issues: the redirect url uses the same characters (?, =, ...), which confuses the system, and the parameters get truncated.

So something like that, but this obviously doesn't work:

window.location = "/login?redirect=/original_location?p1=vl1&p2=v2

Any suggestion is appreciated. I tried encodeURI() but that didn't work.

asked Mar 17, 2015 at 6:07
1
  • 1
    check encodeURIConponent() Commented Mar 17, 2015 at 6:12

1 Answer 1

16

You can use encodeURIComponent()

The encodeURIComponent() method encodes a Uniform Resource Identifier (URI) component by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will only be four escape sequences for characters composed of two "surrogate" characters).

Example

window.location = "/login?redirect=" + encodeURIComponent("/original_location?p1=vl1&p2=v2")
answered Mar 17, 2015 at 6:11
Sign up to request clarification or add additional context in comments.

2 Comments

That works. I haven't mentioned that I tried to use encodeURI before, but overlooked encodeURIComponent. When using encodeURI, the browser was being smart and decoded the encoded characters, and that already predicted the failure.
Basically the encodeURIComponent escapes more characters than the encodeURI, so that's why it works.

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.