0

当参数包含单引号/撇号时,我在 IE11 上使用 jQuery 进行 AJAX 调用有问题。

基于 jQuery 文档https://api.jquery.com/jquery.getjson/

发送到服务器的数据作为查询字符串附加到 URL。如果 data 参数的值是一个普通对象,它会在附加到 URL 之前转换为字符串并进行 url 编码。

它应该对任何特殊字符进行编码,但显然对 IE11 没有这样做。

AJAX 调用如下所示:

$.getJSON(
"https://fqdn.to.server:8888/pdqm/endpoint",
{
   firstName: self.firstName(),
   lastName: self.lastName()
},
function (data) { 
    //here is some stuff to do with UI
}

当使用搜索示例 Va$$ar O'Connor 时,它将创建请求 URL 为

https://fqdn.to.server:8888/pdqm/endpoint?firstName=Va%24%24ar&lastName=O'Connor

在 Chrome/Firefox 中看起来像

https://fqdn.to.server:8888/pdqm/endpoint?firstName=Va%24%24ar&lastName=O%27Connor

这是正确编码的 URL。

任何提示如何让它在 IE 上工作?或者另一方面 - 单引号/撇号是否是查询字符串中的有效字符,无论如何都必须由端点处理?

4

1 回答 1

1

如果这是唯一给你带来麻烦的字符,你可以一起破解一个解决方法来检查用户是否在 IE 上,并使用 JavaScriptreplace()函数从那里替换它:

var firstName, lastName;
if (window.navigator.userAgent.indexOf("MSIE") > 0) {
    // they are using I.E.
    firstName = self.firstName().replace(/\'/g, "%27");
    lastName = self.lastName().replace(/\'/g, "%27");
}
else {
    // every other browser, just set them normally
    firstName = self.firstName();
    lastName = self.lastName();
}
$.getJSON(
    "https://fqdn.to.server:8888/pdqm/endpoint",
    {
       firstName: firstName,
       lastName: lastName
    },
    function (data) { 
        //here is some stuff to do with UI
    }
);
于 2018-07-11T14:50:34.353 回答