当我从Javascript函数以JSON发送ajax请求时,其中的数据中可能包含“#”,该请求将丢失“#”之后的其余部分。
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&identifier="+ identifier+ "&description="+ description+ "&ddfsFileNo=" + ddfsFileNo+"&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&identifier=ddddd&description=vfdfvdfv&fileNo=ddfffd
但是当我在任何数据中添加#时(例如,如果我将description设置为“ kjkj12345#6789”),则请求将类似于:
http://localhost:8080/pro/eud/pad/verification.htm/?pageAction=onverify&identifier=ddddd&description=kjkj12345
,其余请求将从上下文中丢失。
我希望请求网址为:
我在做什么错了?
答案 0 :(得分:1)
#
字符在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());