Когда я отправляю ajax-запрос из функции Javascript в виде JSON, где данные могут содержать «#», запрос теряет оставшиеся части после «#».

function test() { var identifier = $("#identifier").val(); var description = $("#description").val(); var fileNo = $("#fileNo").val(); var prefix = $("#prefixHid").val(); $.ajax({type : "POST",url : "verification.html?pageAction=onverify{amp}amp;identifier="  identifier  "{amp}amp;description="  description  "{amp}amp;ddfsFileNo="   ddfsFileNo "{amp}amp;prefix=" prefix, data : $("#verificationSearchForm").serialize(),dataType : "json", success : function(response) { if (response.success == true) { } else { alert(response.errMsg); } } }); } 

Что я получу, если у данных нет #:

 http://localhost:8080/pro/eud/pad/verification.htm/?pageAction=onverify{amp}amp;identifier=ddddd{amp}amp;description=vfdfvdfv{amp}amp;fileNo=ddfffd 

Но когда я добавлю # в любой из данных (например, если я установлю описание в «kjkj12345 # 6789»), тогда запрос будет выглядеть так:

 http://localhost:8080/pro/eud/pad/verification.htm/?pageAction=onverify{amp}amp;identifier=ddddd{amp}amp;description=kjkj12345 

и остальная часть запроса будет потеряна из контекста.

Я ожидаю, что URL запроса будет:

HTTP: // локальный: 8080 / про / EUD / колодки / verification.htm / pageAction = onverify и идентификатор = DDDDD и описание = kjkj12345 # 6789 {amp}amp; fileNo = ddfffd

Что я делаю неправильно?

Символ # имеет особое значение в URL; это обозначает фрагмент. Таким образом, любые значения строки запроса, следующие за ним, будут игнорироваться и помещаться во фрагмент.

Чтобы это исправить, вам нужно закодировать # когда оно появляется в любых значениях. Для этого вы можете использовать encodeURIComponent() , например:

 var identifier = window.encodeURIComponent($("#identifier").val()); var description = window.encodeURIComponent($("#description").val()); var fileNo = window.encodeURIComponent($("#fileNo").val()); var prefix = window.encodeURIComponent($("#prefixHid").val());