使用 Javascript 的 OData 请求中的撇号问题

Stu*_*ong 0 javascript ajax json odata

我有一个文本输入,用于通过 JS 传递值,以使用OData查询参数从 JSON 文件中获取过滤后的名称数据。

如果某人的名字中有撇号,当我传递 URL 时,我会收到错误的请求。

我知道撇号应该通过双引号来转义。我已经尝试过这个,虽然请求没有中断,但它传递时带有两个与数据不匹配的撇号(导致没有结果)。

我的代码大致如下:

JSON

{
    "value": [{
        "Title": "John O'Smith"
    }]
}
Run Code Online (Sandbox Code Playgroud)

超文本标记语言

<input type="text" value="John O'Smith" />
<button>Search</button>
Run Code Online (Sandbox Code Playgroud)

JS

var term = $('input').val();
var searchTerm = term.replace(/'/g, "''");

var serviceURL = "/api/service?&$filter=contains(Title,'" + searchTerm + "')";

$('button').on('click', function(){
    $.get( serviceURL, function( data ) {
        // Code to display filtered JSON data
    });
});
Run Code Online (Sandbox Code Playgroud)

当我serviceURL通过 AJAX 传递上述内容时,URL 将显示为:

/api/service?&$filter=contains(Title,'John O''Smith')
Run Code Online (Sandbox Code Playgroud)

该请求有效,但它带有两个撇号,与我的 JSON 对象不匹配。

如果我按原样传递它 - 没有替换 - 我会得到一个Bad Request.

我也尝试通过其他传统方法转义它('\'',encodeUriComponent)

知道我做错了什么或如何解决这个问题吗?

更新

不幸的是,似乎存在一个单独的问题或者它被大量缓存,因为上面的所有内容现在都按预期工作。

K S*_*ett 5

名称中有一个空格,因此您需要在加倍撇号后对其进行编码:

var term = "John O'Smith";
var searchTerm = encodeURIComponent(term.replace(/'/g, "''"));

var serviceURL = "/api/service?&$filter=contains(Title,'" + searchTerm + "')";
Run Code Online (Sandbox Code Playgroud)

这将产生:

/api/service?&$filter=contains(Title,'John%20O''Smith')
Run Code Online (Sandbox Code Playgroud)