无法从ajax向dot net web服务发送包含“#”的参数

时间:2016-09-26 12:18:08

标签: javascript ajax rest

无法从ajax发送包含“#”的参数到dot net web service。

var s = encodeURI(
    "http://subdomain.mydomain.domain.asmx/getData?OUserId=" + UserId +
    "&Token=" + Token +
    "&OrgId=" + OrgId +
    '&Message=' + Message +
    '&Schoolid=' + SchoolId +
    '&SessionId=" ' + SessionId +
    '&UnicodeValue=' + UnicodeValue +
    '&ClassID=' + ClassIdCommaSeparated.toString()
);

$.ajax({
    url: s,
    error: function(err) {
        alert(err);
    },
    success: function(data) {....
    }
});

此处classIdCommaSeparated为1#1#1#1#1,1#1#1#1#1,1#1#1#1#1

2 个答案:

答案 0 :(得分:1)

对各个部分使用encodeURIComponent,而不是encodeURI整体:

var s = "http://subdomain.mydomain.domain.asmx/getData?OUserId=" + encodeURIComponent(UserId) +
        "&Token=" + encodeURIComponent(Token) +
        "&OrgId=" + encodeURIComponent(OrgId) +
        '&Message=' + encodeURIComponent(Message) +
        '&Schoolid=' + encodeURIComponent(SchoolId) +
        '&SessionId=" ' + encodeURIComponent(SessionId) +
        '&UnicodeValue=' + encodeURIComponent(UnicodeValue) +
        '&ClassID=' + encodeURIComponent(ClassIdCommaSeparated.toString());

$.ajax({
    url: s,
    error: function(err) {
        alert(err);
    },
    success: function(data) {....
    }
});

从技术上讲,名称(在=之前)和值(在=之后)都需要编码,但是当你的名字只包含字母AZ时(大写或小写) )或数字,就像你的数字一样,对它们进行编码并不会改变它们。 (如果您不知道这些名称是什么,那么您肯定希望通过encodeURIComponent传递它们。)

答案 1 :(得分:0)

几个小时后,我无法理解是什么引起了这个问题。但我已经解决了这个问题的临时解决方案。我使用了下划线代替#并且我得到了它的工作。谢谢@ T.J。克劳德看了看。