2012-11-05 3 views
5

AJAX를 사용하여 struts 액션을 수행하고 있지만 모든 것이 정상이지만 요청 매개 변수로 URL에 매개 변수를 전달할 때 Firefox에는 문제가 있습니다. 해당 매개 변수에 해시 (#) 기호가 포함되어 있으면 firefox는 해당 기호 다음의 모든 항목을 제거하고 해당 매개 변수를 사용하지 않고 해당 매개 변수를 전송합니다.Firefox에서 작동하지 않는 url의 요청 매개 변수에 "#"해시 기호를 전달합니다.

예를 들어, im이 Firefox에서 test123 # abcd를 전달하는 경우 내 요구 사항에 바람직하지 않은 test123 # abcd와 대조적으로 동작 클래스에서 test123 만 얻고 있습니다. IE의 경우 완벽하게 작동합니다. Firefox에서 # 기호를 포함한 전체 매개 변수를 추출 할 수 있습니다.

자바 액션 코드도 게시해야하는지 알려주세요. 감사합니다.

JS는

var valuePassword=test123#abcd; 

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

답변

10

사용이

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

이것은 당신의 valuePassword URL을

그리고 다른 측면에서 쿼리 문자열로 전달 될 수있는 유효한 URL 구성 요소에 인코딩됩니다 니펫을 인코딩 된 문자열에서 값을 얻으려면 decodeURIComponent을 사용해야합니다.

당신이 HTTP POST 요청을 할 필요가 데이터를 변경하면
var value = decodeURIComponent(valuePasswordPassed); 

Go here

+1

이유는 데이터를 인코딩해야하기 때문입니다. 해쉬 (#)는 유효하지 않습니다. 해시 및 그 이후의 모든 것은 브라우저를 떠나서는 안됩니다. – Onkelborg

+1

개인적으로 [이 문서] (https://developer.mozilla.org/en-US/)에 링크하고 싶습니다. docs/JavaScript/Reference/Global_Objects/encodeURIComponent) 대신 w3schools (하위 파문 문서를 생성하는 경향이 있음)를 사용합니다. –

+0

고맙습니다. 모두 작동합니다. 이전에 생각대로 IE에서 문제가 없었습니다. 두 브라우저가 다르게 작동하는 이유가 궁금 해서요. URL 쿼리 문자열을 인코딩해야한다는 것에 동의합니다. 감사합니다 – user1697113

1

에 대한 자세한 내용을 알고. GET 요청이 아닙니다. 이렇게하면 암호를 인코딩하지 않고도 자동으로 문제를 해결할 수 있습니다.

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

나는 xmlHTTP.open ("GET", url, true); to xmlHTTP.open ("POST", url, true); 하지만 똑같아. 메신저가 제대로하고 있는지 확실하게 알지는 못했지만 인코딩은 내 목적을 해결해 줬어. 고마워. – user1697113

+0

@ user1697113 값은 url이 아니라 본문에 있어야합니다. 내 대답을 업데이트 할게. – ZippyV

관련 문제