prototype.js로 URL의 쿼리스트링 값 가져오기 (parseQuery,toQueryParams)
GET방식의 호출을 하면 주소뒤에 ?id=3&nick=outsider 같은 형식의 쿼리스트링이 붙는다. 이런 부분은 JSP나 ASP에서는 request객체를 이용해서 가져올 수 있지만 Javascript에서 이것을 다뤄야 할 때도 있다.
window.location.search
를 이용하면 ?id=3&nick=outsider라는 쿼리스트링이 그대로 튀어나온다. 이걸 그대로 가공해서 사용해도 되지만 prototype.js는 이걸 위한 메서드를 제공한다. (window.location.search는 prototype.js에서 제공하는 것은 아니고 javascript에서 제공하는 것이다.)
parseQuery()
toQueryParams()
Prototype Framework의 API문서 를 보면 parseQuery()은 "toQueryParams()의 별칭"이라고 나온다. 결국 기능은 toQueryParams()만 있는건데 쿼리스트링을 파라미터와 값의 쌍으로 된 Object를 리턴해 준다. API문서 에 자세한 예시들이 있기 때문에 보면 금방 이해가 될 것이다.(사이트 개편된뒤로 API문서나
만약 http://www.test.com/test/test.jsp??id=3&nick=outsider 라고 호출했을 경우 다음 코드를 실행하면 주석해 보시된 내용의 값을 출력해 준다.
1 2 3 4 5 6 |
|
1번과 2번줄은 아무것이나 사용해도 차이가 없다.
만약 정의되지 않거나 값이 없는 파라미터를 가져오려고 하면 undefined가 나온다.
도메인툴에서 제 블로그에 쿼리스트링을 포함한 링크가 있으니 이걸 제거하라고 하네요. Link URLs contain querystrings: Rewrite links to work without using querystrings. 이게 도대체 무슨 말인가요? 쿼리스트링이란 개념이 좀 생소해서요...
도메인 툴이란게 정확히 어떤것을 말씀하시는 지는 모르겠는데요. 보통 URL에 쿼리스트링이라고 말하면 GET방식으로 보내는 URL의 파라미터를 말합니다. www.example.com/bbs.php?id=7&cmd=list&search=test 이런식의 주소이면 ?뒤에 있는 id=7&cmd=list&search=test 를 쿼리스트링이라고 말합니다. 서버에서 이쿼리스트링의 값을 가지고 어떤식의 동작을 할지를 결정할 수 있죠. 텍스트큐브같은 경우는 이걸 rewrite해서 www.example.com/bbs/7 이런등의 방식으로 깔끔하게 보여줍니다. 블로그에 가봤는데 어떤부분을 가지고 쿼리스트링이 문제라고 하는지는 잘 모르겠네요.
답변 고맙습니다. 한동안 삽질로 결국 찾아냈습니다. 텍스트큐브의 링크 중에 ?가 들어간 링크를 쿼리스트링이라고 그러네요. 피드버너 이메일구독 링크와 Prev페이지, Next 페이지 등 페이지 이동 링크등에 걸린 것이 모두 쿼리스트링이더군요. 답변 정말 고맙습니다.
문제를 찾으셨다니 다행이네요.. ^^