在参数数据中包含#之后,Ajax POST请求数据丢失

时间:2019-08-27 13:15:42

标签: jquery json ajax

当我从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

,其余请求将从上下文中丢失。

我希望请求网址为:

http://localhost:8080/pro/eud/pad/verification.htm/?pageAction=onverify&identifier=ddddd&description=kjkj12345#6789&fileNo=ddfffd

我在做什么错了?

1 个答案:

答案 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());